mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Compare commits
196 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
28a33cbc24 | ||
|
|
bff9d18656 | ||
|
|
9a2bc8603e | ||
|
|
c064da4714 | ||
|
|
533827c921 | ||
|
|
1b499d05ee | ||
|
|
bc792e612e | ||
|
|
d75e2c9ad9 | ||
|
|
935173744a | ||
|
|
ce9f8d6b39 | ||
|
|
1793416287 | ||
|
|
7c8d3a42fe | ||
|
|
650d2a06b4 | ||
|
|
751f188dd5 | ||
|
|
c999ff6802 | ||
|
|
9909d45a85 | ||
|
|
537632e0a5 | ||
|
|
62b62ad873 | ||
|
|
9ff19309a9 | ||
|
|
c6727932cf | ||
|
|
85efc72a02 | ||
|
|
3e4b9459fb | ||
|
|
309d4b000b | ||
|
|
61c901c569 | ||
|
|
380e99fc44 | ||
|
|
e9a09aed3e | ||
|
|
85a053fa5f | ||
|
|
3592c3cd06 | ||
|
|
f2b88d65aa | ||
|
|
b789ad63ac | ||
|
|
b9a09a0660 | ||
|
|
5309bdac70 | ||
|
|
263afbdd1c | ||
|
|
70dc8fa782 | ||
|
|
856ac3c6e0 | ||
|
|
1bcfecc028 | ||
|
|
68b6352cdc | ||
|
|
38be3c7e77 | ||
|
|
6c37c95804 | ||
|
|
e909be8252 | ||
|
|
ca760ca523 | ||
|
|
4a043d79dc | ||
|
|
5520e42690 | ||
|
|
5d9fbed18e | ||
|
|
a586e14f2c | ||
|
|
7ee91de45a | ||
|
|
b96b62db8c | ||
|
|
c7b2ec2106 | ||
|
|
7b1c0d26a8 | ||
|
|
c5de50dada | ||
|
|
2dd17030c9 | ||
|
|
dc34b05fea | ||
|
|
c022630633 | ||
|
|
78d4803f75 | ||
|
|
58e94ae184 | ||
|
|
a05b7ea03d | ||
|
|
25f7fd470b | ||
|
|
8a7298b780 | ||
|
|
b1bdd2eb31 | ||
|
|
893a0574de | ||
|
|
eea03c20ae | ||
|
|
e2f3b78557 | ||
|
|
734b65417b | ||
|
|
6f70242858 | ||
|
|
c1e3209623 | ||
|
|
fe2e27bb92 | ||
|
|
2ab1c24bbd | ||
|
|
a9866ba47c | ||
|
|
89d7ae34cd | ||
|
|
331ae4962b | ||
|
|
bae7641ba0 | ||
|
|
69c7e3772e | ||
|
|
69da52f7ea | ||
|
|
45a5e119ad | ||
|
|
d4f513ff12 | ||
|
|
d9ba8db215 | ||
|
|
465e4f2b19 | ||
|
|
a8f4bf0eb4 | ||
|
|
5cfc545f50 | ||
|
|
e28f1aa110 | ||
|
|
5cb6a9bcca | ||
|
|
6a3ca4f188 | ||
|
|
236df3755d | ||
|
|
5bdca4e076 | ||
|
|
de74646c60 | ||
|
|
1c7e7f6c07 | ||
|
|
9a75c6e524 | ||
|
|
a8abbca661 | ||
|
|
df12aef6a1 | ||
|
|
a6b2029796 | ||
|
|
f9717f3110 | ||
|
|
07f604ccfd | ||
|
|
b45f9330b4 | ||
|
|
c8f4a2d095 | ||
|
|
a5e135122c | ||
|
|
d9914cf661 | ||
|
|
a018540141 | ||
|
|
635ac11964 | ||
|
|
5bb93f1a21 | ||
|
|
602e65a3b0 | ||
|
|
9634252617 | ||
|
|
283283c4da | ||
|
|
9e33ce453f | ||
|
|
10cc1bdd5e | ||
|
|
ef764a13b8 | ||
|
|
68653359be | ||
|
|
5dcaba7ed5 | ||
|
|
96f80d123e | ||
|
|
ef209f1598 | ||
|
|
936597631d | ||
|
|
2eebc1e188 | ||
|
|
cd60042cc1 | ||
|
|
3cf003c08b | ||
|
|
3ae629d98b | ||
|
|
ffc61ccbb9 | ||
|
|
1765fe5edc | ||
|
|
d35212f3ca | ||
|
|
e5254a625d | ||
|
|
fce667c574 | ||
|
|
3e997130bd | ||
|
|
6469195940 | ||
|
|
166973e506 | ||
|
|
f507598b06 | ||
|
|
33d519feac | ||
|
|
05d290d66b | ||
|
|
1694a0a08e | ||
|
|
310e158cc3 | ||
|
|
46c87852e9 | ||
|
|
3d2195c332 | ||
|
|
64919e6091 | ||
|
|
6b1859dba0 | ||
|
|
3cc5d2a6b9 | ||
|
|
4a5f7eff8b | ||
|
|
a6e7360b22 | ||
|
|
a52359b56c | ||
|
|
d0efa8f23a | ||
|
|
1632dcc93f | ||
|
|
40a9b7963d | ||
|
|
aa292847b9 | ||
|
|
e3a746f5aa | ||
|
|
7ac2908e4b | ||
|
|
c1f5163de4 | ||
|
|
b28ba72665 | ||
|
|
efc73f4bbc | ||
|
|
941a46a29c | ||
|
|
313b037cf0 | ||
|
|
022f09784b | ||
|
|
cae296c42c | ||
|
|
1b9faf5e66 | ||
|
|
91c68ce2b2 | ||
|
|
96ca7ffe74 | ||
|
|
a64d49c3dd | ||
|
|
684901a6df | ||
|
|
8e83989106 | ||
|
|
c1109736bc | ||
|
|
b48d966526 | ||
|
|
c2ca7d92ed | ||
|
|
efd821182c | ||
|
|
b3190466b0 | ||
|
|
10a9109f27 | ||
|
|
147f20e316 | ||
|
|
472dd35ccb | ||
|
|
0e050923a7 | ||
|
|
bb3bb3a5b8 | ||
|
|
6bd0405bb4 | ||
|
|
a73f89a61f | ||
|
|
054581e6c1 | ||
|
|
6fecd35d4c | ||
|
|
b761c9b1f4 | ||
|
|
b93984c9af | ||
|
|
d4e4164943 | ||
|
|
960fb66e52 | ||
|
|
b94e52f626 | ||
|
|
acfa9e94e2 | ||
|
|
3da947b269 | ||
|
|
113c62d984 | ||
|
|
839efb4ffb | ||
|
|
f0b77f2c0e | ||
|
|
c6a4ebb9ae | ||
|
|
cc2caea5b6 | ||
|
|
6a6dccba2f | ||
|
|
2d3f6ccc4e | ||
|
|
0c47935c5b | ||
|
|
b876c1a0bc | ||
|
|
249e2a38fb | ||
|
|
ea8e867d9b | ||
|
|
88ca518b0b | ||
|
|
57f9616b79 | ||
|
|
a1071a5abf | ||
|
|
56f4a9f76d | ||
|
|
c7a2918373 | ||
|
|
ca3c2c706d | ||
|
|
014fc8fbec | ||
|
|
15aa5c7546 | ||
|
|
bb384b5295 | ||
|
|
4069d6f86b |
@@ -1626,3 +1626,5 @@ MX6Q_PAD_SD2_DAT3__PCIE_CTRL_MUX_11 1587
|
||||
MX6Q_PAD_SD2_DAT3__GPIO_1_12 1588
|
||||
MX6Q_PAD_SD2_DAT3__SJC_DONE 1589
|
||||
MX6Q_PAD_SD2_DAT3__ANATOP_TESTO_3 1590
|
||||
MX6Q_PAD_ENET_RX_ER__ANATOP_USBOTG_ID 1591
|
||||
MX6Q_PAD_GPIO_1__ANATOP_USBOTG_ID 1592
|
||||
|
||||
@@ -86,7 +86,7 @@ There is also a gitweb interface available at
|
||||
http://www.kernel.org/git/?p=utils/kernel/kexec/kexec-tools.git
|
||||
|
||||
More information about kexec-tools can be found at
|
||||
http://www.kernel.org/pub/linux/utils/kernel/kexec/README.html
|
||||
http://horms.net/projects/kexec/
|
||||
|
||||
3) Unpack the tarball with the tar command, as follows:
|
||||
|
||||
|
||||
@@ -3433,13 +3433,14 @@ S: Supported
|
||||
F: drivers/idle/i7300_idle.c
|
||||
|
||||
IEEE 802.15.4 SUBSYSTEM
|
||||
M: Alexander Smirnov <alex.bluesman.smirnov@gmail.com>
|
||||
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||
M: Sergey Lapin <slapin@ossfans.org>
|
||||
L: linux-zigbee-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
W: http://apps.sourceforge.net/trac/linux-zigbee
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lowpan/lowpan.git
|
||||
S: Maintained
|
||||
F: net/ieee802154/
|
||||
F: net/mac802154/
|
||||
F: drivers/ieee802154/
|
||||
|
||||
IIO SUBSYSTEM AND DRIVERS
|
||||
@@ -5564,7 +5565,7 @@ F: Documentation/networking/LICENSE.qla3xxx
|
||||
F: drivers/net/ethernet/qlogic/qla3xxx.*
|
||||
|
||||
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
||||
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||
M: Sony Chacko <sony.chacko@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
L: netdev@vger.kernel.org
|
||||
@@ -5572,7 +5573,6 @@ S: Supported
|
||||
F: drivers/net/ethernet/qlogic/qlcnic/
|
||||
|
||||
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||
M: Anirban Chakraborty <anirban.chakraborty@qlogic.com>
|
||||
M: Jitendra Kalsaria <jitendra.kalsaria@qlogic.com>
|
||||
M: Ron Mercer <ron.mercer@qlogic.com>
|
||||
M: linux-driver@qlogic.com
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 5
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc7
|
||||
EXTRAVERSION =
|
||||
NAME = Saber-toothed Squirrel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
||||
@@ -43,8 +43,8 @@
|
||||
|
||||
pmu {
|
||||
compatible = "arm,cortex-a9-pmu";
|
||||
interrupts = <0 8 0x04
|
||||
0 9 0x04>;
|
||||
interrupts = <0 6 0x04
|
||||
0 7 0x04>;
|
||||
};
|
||||
|
||||
L2: l2-cache {
|
||||
@@ -119,8 +119,8 @@
|
||||
gmac0: eth@e2000000 {
|
||||
compatible = "st,spear600-gmac";
|
||||
reg = <0xe2000000 0x8000>;
|
||||
interrupts = <0 23 0x4
|
||||
0 24 0x4>;
|
||||
interrupts = <0 33 0x4
|
||||
0 34 0x4>;
|
||||
interrupt-names = "macirq", "eth_wake_irq";
|
||||
status = "disabled";
|
||||
};
|
||||
@@ -202,6 +202,7 @@
|
||||
kbd@e0300000 {
|
||||
compatible = "st,spear300-kbd";
|
||||
reg = <0xe0300000 0x1000>;
|
||||
interrupts = <0 52 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
@@ -224,7 +225,7 @@
|
||||
serial@e0000000 {
|
||||
compatible = "arm,pl011", "arm,primecell";
|
||||
reg = <0xe0000000 0x1000>;
|
||||
interrupts = <0 36 0x4>;
|
||||
interrupts = <0 35 0x4>;
|
||||
status = "disabled";
|
||||
};
|
||||
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
/include/ "spear320.dtsi"
|
||||
|
||||
/ {
|
||||
model = "ST SPEAr300 Evaluation Board";
|
||||
compatible = "st,spear300-evb", "st,spear300";
|
||||
model = "ST SPEAr320 Evaluation Board";
|
||||
compatible = "st,spear320-evb", "st,spear320";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
|
||||
ahb {
|
||||
pinmux@b3000000 {
|
||||
st,pinmux-mode = <3>;
|
||||
st,pinmux-mode = <4>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&state_default>;
|
||||
|
||||
|
||||
@@ -181,6 +181,7 @@
|
||||
timer@f0000000 {
|
||||
compatible = "st,spear-timer";
|
||||
reg = <0xf0000000 0x400>;
|
||||
interrupt-parent = <&vic0>;
|
||||
interrupts = <16>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -87,7 +87,7 @@ void __init spear3xx_map_io(void)
|
||||
|
||||
static void __init spear3xx_timer_init(void)
|
||||
{
|
||||
char pclk_name[] = "pll3_48m_clk";
|
||||
char pclk_name[] = "pll3_clk";
|
||||
struct clk *gpt_clk, *pclk;
|
||||
|
||||
spear3xx_clk_init();
|
||||
|
||||
@@ -423,7 +423,7 @@ void __init spear6xx_map_io(void)
|
||||
|
||||
static void __init spear6xx_timer_init(void)
|
||||
{
|
||||
char pclk_name[] = "pll3_48m_clk";
|
||||
char pclk_name[] = "pll3_clk";
|
||||
struct clk *gpt_clk, *pclk;
|
||||
|
||||
spear6xx_clk_init();
|
||||
|
||||
@@ -1091,7 +1091,7 @@ error:
|
||||
while (--i)
|
||||
if (pages[i])
|
||||
__free_pages(pages[i], 0);
|
||||
if (array_size < PAGE_SIZE)
|
||||
if (array_size <= PAGE_SIZE)
|
||||
kfree(pages);
|
||||
else
|
||||
vfree(pages);
|
||||
@@ -1106,7 +1106,7 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t s
|
||||
for (i = 0; i < count; i++)
|
||||
if (pages[i])
|
||||
__free_pages(pages[i], 0);
|
||||
if (array_size < PAGE_SIZE)
|
||||
if (array_size <= PAGE_SIZE)
|
||||
kfree(pages);
|
||||
else
|
||||
vfree(pages);
|
||||
|
||||
@@ -43,9 +43,9 @@ endif
|
||||
|
||||
OBJCOPYFLAGS += -R .empty_zero_page
|
||||
|
||||
suffix_$(CONFIG_KERNEL_GZIP) = gz
|
||||
suffix_$(CONFIG_KERNEL_BZIP2) = bz2
|
||||
suffix_$(CONFIG_KERNEL_LZMA) = lzma
|
||||
suffix-$(CONFIG_KERNEL_GZIP) = gz
|
||||
suffix-$(CONFIG_KERNEL_BZIP2) = bz2
|
||||
suffix-$(CONFIG_KERNEL_LZMA) = lzma
|
||||
|
||||
$(obj)/piggy.o: $(obj)/vmlinux.scr $(obj)/vmlinux.bin.$(suffix-y) FORCE
|
||||
$(call if_changed,ld)
|
||||
|
||||
@@ -28,7 +28,7 @@ static unsigned long free_mem_ptr;
|
||||
static unsigned long free_mem_end_ptr;
|
||||
|
||||
#ifdef CONFIG_KERNEL_BZIP2
|
||||
static void *memset(void *s, int c, size_t n)
|
||||
void *memset(void *s, int c, size_t n)
|
||||
{
|
||||
char *ss = s;
|
||||
|
||||
@@ -39,6 +39,16 @@ static void *memset(void *s, int c, size_t n)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_KERNEL_GZIP
|
||||
void *memcpy(void *dest, const void *src, size_t n)
|
||||
{
|
||||
char *d = dest;
|
||||
const char *s = src;
|
||||
while (n--)
|
||||
*d++ = *s++;
|
||||
|
||||
return dest;
|
||||
}
|
||||
|
||||
#define BOOT_HEAP_SIZE 0x10000
|
||||
#include "../../../../lib/decompress_inflate.c"
|
||||
#endif
|
||||
|
||||
@@ -113,9 +113,6 @@ struct pt_regs {
|
||||
|
||||
#define PTRACE_OLDSETOPTIONS 21
|
||||
|
||||
/* options set using PTRACE_SETOPTIONS */
|
||||
#define PTRACE_O_TRACESYSGOOD 0x00000001
|
||||
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#include <asm/m32r.h> /* M32R_PSW_BSM, M32R_PSW_BPM */
|
||||
|
||||
@@ -591,17 +591,16 @@ void user_enable_single_step(struct task_struct *child)
|
||||
|
||||
if (access_process_vm(child, pc&~3, &insn, sizeof(insn), 0)
|
||||
!= sizeof(insn))
|
||||
return -EIO;
|
||||
return;
|
||||
|
||||
compute_next_pc(insn, pc, &next_pc, child);
|
||||
if (next_pc & 0x80000000)
|
||||
return -EIO;
|
||||
return;
|
||||
|
||||
if (embed_debug_trap(child, next_pc))
|
||||
return -EIO;
|
||||
return;
|
||||
|
||||
invalidate_cache();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void user_disable_single_step(struct task_struct *child)
|
||||
|
||||
@@ -286,7 +286,7 @@ handle_signal(unsigned long sig, struct k_sigaction *ka, siginfo_t *info,
|
||||
case -ERESTARTNOINTR:
|
||||
regs->r0 = regs->orig_r0;
|
||||
if (prev_insn(regs) < 0)
|
||||
return -EFAULT;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -288,6 +288,7 @@ config MIPS_MALTA
|
||||
select SYS_HAS_CPU_MIPS32_R1
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select SYS_HAS_CPU_MIPS64_R1
|
||||
select SYS_HAS_CPU_MIPS64_R2
|
||||
select SYS_HAS_CPU_NEVADA
|
||||
select SYS_HAS_CPU_RM7000
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
@@ -1423,6 +1424,7 @@ config CPU_SB1
|
||||
config CPU_CAVIUM_OCTEON
|
||||
bool "Cavium Octeon processor"
|
||||
depends on SYS_HAS_CPU_CAVIUM_OCTEON
|
||||
select ARCH_SPARSEMEM_ENABLE
|
||||
select CPU_HAS_PREFETCH
|
||||
select CPU_SUPPORTS_64BIT_KERNEL
|
||||
select SYS_SUPPORTS_SMP
|
||||
|
||||
@@ -21,6 +21,7 @@ config BCM47XX_BCMA
|
||||
select BCMA
|
||||
select BCMA_HOST_SOC
|
||||
select BCMA_DRIVER_MIPS
|
||||
select BCMA_HOST_PCI if PCI
|
||||
select BCMA_DRIVER_PCI_HOSTMODE if PCI
|
||||
default y
|
||||
help
|
||||
|
||||
@@ -79,11 +79,11 @@ static int __init config_pcmcia_cs(unsigned int cs,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const __initdata struct {
|
||||
static const struct {
|
||||
unsigned int cs;
|
||||
unsigned int base;
|
||||
unsigned int size;
|
||||
} pcmcia_cs[3] = {
|
||||
} pcmcia_cs[3] __initconst = {
|
||||
{
|
||||
.cs = MPI_CS_PCMCIA_COMMON,
|
||||
.base = BCM_PCMCIA_COMMON_BASE_PA,
|
||||
|
||||
@@ -82,10 +82,6 @@ config CAVIUM_OCTEON_LOCK_L2_MEMCPY
|
||||
help
|
||||
Lock the kernel's implementation of memcpy() into L2.
|
||||
|
||||
config ARCH_SPARSEMEM_ENABLE
|
||||
def_bool y
|
||||
select SPARSEMEM_STATIC
|
||||
|
||||
config IOMMU_HELPER
|
||||
bool
|
||||
|
||||
|
||||
@@ -185,7 +185,6 @@ static void __cpuinit octeon_init_secondary(void)
|
||||
octeon_init_cvmcount();
|
||||
|
||||
octeon_irq_setup_secondary();
|
||||
raw_local_irq_enable();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -233,6 +232,7 @@ static void octeon_smp_finish(void)
|
||||
|
||||
/* to generate the first CPU timer interrupt */
|
||||
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <linux/irqflags.h>
|
||||
#include <linux/types.h>
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm/byteorder.h> /* sigh ... */
|
||||
#include <asm/cpu-features.h>
|
||||
#include <asm/sgidefs.h>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#ifndef __ASM_CMPXCHG_H
|
||||
#define __ASM_CMPXCHG_H
|
||||
|
||||
#include <linux/bug.h>
|
||||
#include <linux/irqflags.h>
|
||||
#include <asm/war.h>
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@
|
||||
#define PRID_IMP_24KE 0x9600
|
||||
#define PRID_IMP_74K 0x9700
|
||||
#define PRID_IMP_1004K 0x9900
|
||||
#define PRID_IMP_M14KC 0x9c00
|
||||
|
||||
/*
|
||||
* These are the PRID's for when 23:16 == PRID_COMP_SIBYTE
|
||||
@@ -260,12 +261,12 @@ enum cpu_type_enum {
|
||||
*/
|
||||
CPU_4KC, CPU_4KEC, CPU_4KSC, CPU_24K, CPU_34K, CPU_1004K, CPU_74K,
|
||||
CPU_ALCHEMY, CPU_PR4450, CPU_BMIPS32, CPU_BMIPS3300, CPU_BMIPS4350,
|
||||
CPU_BMIPS4380, CPU_BMIPS5000, CPU_JZRISC,
|
||||
CPU_BMIPS4380, CPU_BMIPS5000, CPU_JZRISC, CPU_M14KC,
|
||||
|
||||
/*
|
||||
* MIPS64 class processors
|
||||
*/
|
||||
CPU_5KC, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2,
|
||||
CPU_5KC, CPU_5KE, CPU_20KC, CPU_25KF, CPU_SB1, CPU_SB1A, CPU_LOONGSON2,
|
||||
CPU_CAVIUM_OCTEON, CPU_CAVIUM_OCTEON_PLUS, CPU_CAVIUM_OCTEON2,
|
||||
CPU_XLR, CPU_XLP,
|
||||
|
||||
@@ -288,7 +289,7 @@ enum cpu_type_enum {
|
||||
#define MIPS_CPU_ISA_M64R2 0x00000100
|
||||
|
||||
#define MIPS_CPU_ISA_32BIT (MIPS_CPU_ISA_I | MIPS_CPU_ISA_II | \
|
||||
MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M32R2 )
|
||||
MIPS_CPU_ISA_M32R1 | MIPS_CPU_ISA_M32R2)
|
||||
#define MIPS_CPU_ISA_64BIT (MIPS_CPU_ISA_III | MIPS_CPU_ISA_IV | \
|
||||
MIPS_CPU_ISA_V | MIPS_CPU_ISA_M64R1 | MIPS_CPU_ISA_M64R2)
|
||||
|
||||
|
||||
@@ -206,7 +206,7 @@
|
||||
|
||||
#define GIC_VPE_EIC_SHADOW_SET_BASE 0x0100
|
||||
#define GIC_VPE_EIC_SS(intr) \
|
||||
(GIC_EIC_SHADOW_SET_BASE + (4 * intr))
|
||||
(GIC_VPE_EIC_SHADOW_SET_BASE + (4 * intr))
|
||||
|
||||
#define GIC_VPE_EIC_VEC_BASE 0x0800
|
||||
#define GIC_VPE_EIC_VEC(intr) \
|
||||
@@ -330,6 +330,17 @@ struct gic_intr_map {
|
||||
#define GIC_FLAG_TRANSPARENT 0x02
|
||||
};
|
||||
|
||||
/*
|
||||
* This is only used in EIC mode. This helps to figure out which
|
||||
* shared interrupts we need to process when we get a vector interrupt.
|
||||
*/
|
||||
#define GIC_MAX_SHARED_INTR 0x5
|
||||
struct gic_shared_intr_map {
|
||||
unsigned int num_shared_intr;
|
||||
unsigned int intr_list[GIC_MAX_SHARED_INTR];
|
||||
unsigned int local_intr_mask;
|
||||
};
|
||||
|
||||
extern void gic_init(unsigned long gic_base_addr,
|
||||
unsigned long gic_addrspace_size, struct gic_intr_map *intrmap,
|
||||
unsigned int intrmap_size, unsigned int irqbase);
|
||||
@@ -338,5 +349,7 @@ extern unsigned int gic_get_int(void);
|
||||
extern void gic_send_ipi(unsigned int intr);
|
||||
extern unsigned int plat_ipi_call_int_xlate(unsigned int);
|
||||
extern unsigned int plat_ipi_resched_int_xlate(unsigned int);
|
||||
extern void gic_bind_eic_interrupt(int irq, int set);
|
||||
extern unsigned int gic_get_timer_pending(void);
|
||||
|
||||
#endif /* _ASM_GICREGS_H */
|
||||
|
||||
@@ -251,7 +251,7 @@ struct f_format { /* FPU register format */
|
||||
unsigned int func : 6;
|
||||
};
|
||||
|
||||
struct ma_format { /* FPU multipy and add format (MIPS IV) */
|
||||
struct ma_format { /* FPU multiply and add format (MIPS IV) */
|
||||
unsigned int opcode : 6;
|
||||
unsigned int fr : 5;
|
||||
unsigned int ft : 5;
|
||||
@@ -324,7 +324,7 @@ struct f_format { /* FPU register format */
|
||||
unsigned int opcode : 6;
|
||||
};
|
||||
|
||||
struct ma_format { /* FPU multipy and add format (MIPS IV) */
|
||||
struct ma_format { /* FPU multiply and add format (MIPS IV) */
|
||||
unsigned int fmt : 2;
|
||||
unsigned int func : 4;
|
||||
unsigned int fd : 5;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include <linux/types.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/bug.h>
|
||||
#include <asm/byteorder.h>
|
||||
#include <asm/cpu.h>
|
||||
#include <asm/cpu-features.h>
|
||||
|
||||
@@ -136,6 +136,7 @@ extern void free_irqno(unsigned int irq);
|
||||
* IE7. Since R2 their number has to be read from the c0_intctl register.
|
||||
*/
|
||||
#define CP0_LEGACY_COMPARE_IRQ 7
|
||||
#define CP0_LEGACY_PERFCNT_IRQ 7
|
||||
|
||||
extern int cp0_compare_irq;
|
||||
extern int cp0_compare_irq_shift;
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
#define CKCTL_6368_USBH_CLK_EN (1 << 15)
|
||||
#define CKCTL_6368_DISABLE_GLESS_EN (1 << 16)
|
||||
#define CKCTL_6368_NAND_CLK_EN (1 << 17)
|
||||
#define CKCTL_6368_IPSEC_CLK_EN (1 << 17)
|
||||
#define CKCTL_6368_IPSEC_CLK_EN (1 << 18)
|
||||
|
||||
#define CKCTL_6368_ALL_SAFE_EN (CKCTL_6368_SWPKT_USB_EN | \
|
||||
CKCTL_6368_SWPKT_SAR_EN | \
|
||||
|
||||
@@ -86,6 +86,16 @@
|
||||
#define GIC_CPU_INT4 4 /* . */
|
||||
#define GIC_CPU_INT5 5 /* Core Interrupt 5 */
|
||||
|
||||
/* MALTA GIC local interrupts */
|
||||
#define GIC_INT_TMR (GIC_CPU_INT5)
|
||||
#define GIC_INT_PERFCTR (GIC_CPU_INT5)
|
||||
|
||||
/* GIC constants */
|
||||
/* Add 2 to convert non-eic hw int # to eic vector # */
|
||||
#define GIC_CPU_TO_VEC_OFFSET (2)
|
||||
/* If we map an intr to pin X, GIC will actually generate vector X+1 */
|
||||
#define GIC_PIN_TO_VEC_OFFSET (1)
|
||||
|
||||
#define GIC_EXT_INTR(x) x
|
||||
|
||||
/* External Interrupts used for IPI */
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
#define CP0_VPECONF0 $1, 2
|
||||
#define CP0_VPECONF1 $1, 3
|
||||
#define CP0_YQMASK $1, 4
|
||||
#define CP0_VPESCHEDULE $1, 5
|
||||
#define CP0_VPESCHEDULE $1, 5
|
||||
#define CP0_VPESCHEFBK $1, 6
|
||||
#define CP0_TCSTATUS $2, 1
|
||||
#define CP0_TCBIND $2, 2
|
||||
|
||||
@@ -22,7 +22,7 @@ struct task_struct;
|
||||
* switch_to(n) should switch tasks to task nr n, first
|
||||
* checking that n isn't the current task, in which case it does nothing.
|
||||
*/
|
||||
extern asmlinkage void *resume(void *last, void *next, void *next_ti);
|
||||
extern asmlinkage void *resume(void *last, void *next, void *next_ti, u32 __usedfpu);
|
||||
|
||||
extern unsigned int ll_bit;
|
||||
extern struct task_struct *ll_task;
|
||||
@@ -66,11 +66,13 @@ do { \
|
||||
|
||||
#define switch_to(prev, next, last) \
|
||||
do { \
|
||||
u32 __usedfpu; \
|
||||
__mips_mt_fpaff_switch_to(prev); \
|
||||
if (cpu_has_dsp) \
|
||||
__save_dsp(prev); \
|
||||
__clear_software_ll_bit(); \
|
||||
(last) = resume(prev, next, task_thread_info(next)); \
|
||||
__usedfpu = test_and_clear_tsk_thread_flag(prev, TIF_USEDFPU); \
|
||||
(last) = resume(prev, next, task_thread_info(next), __usedfpu); \
|
||||
} while (0)
|
||||
|
||||
#define finish_arch_switch(prev) \
|
||||
|
||||
@@ -60,6 +60,8 @@ struct thread_info {
|
||||
register struct thread_info *__current_thread_info __asm__("$28");
|
||||
#define current_thread_info() __current_thread_info
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
/* thread information allocation */
|
||||
#if defined(CONFIG_PAGE_SIZE_4KB) && defined(CONFIG_32BIT)
|
||||
#define THREAD_SIZE_ORDER (1)
|
||||
@@ -85,8 +87,6 @@ register struct thread_info *__current_thread_info __asm__("$28");
|
||||
|
||||
#define STACK_WARN (THREAD_SIZE / 8)
|
||||
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#define PREEMPT_ACTIVE 0x10000000
|
||||
|
||||
/*
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (C) xxxx the Anonymous
|
||||
* Copyright (C) 1994 - 2006 Ralf Baechle
|
||||
* Copyright (C) 2003, 2004 Maciej W. Rozycki
|
||||
* Copyright (C) 2001, 2004 MIPS Inc.
|
||||
* Copyright (C) 2001, 2004, 2011, 2012 MIPS Technologies, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
@@ -199,6 +199,7 @@ void __init check_wait(void)
|
||||
cpu_wait = rm7k_wait_irqoff;
|
||||
break;
|
||||
|
||||
case CPU_M14KC:
|
||||
case CPU_24K:
|
||||
case CPU_34K:
|
||||
case CPU_1004K:
|
||||
@@ -810,6 +811,10 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
||||
c->cputype = CPU_5KC;
|
||||
__cpu_name[cpu] = "MIPS 5Kc";
|
||||
break;
|
||||
case PRID_IMP_5KE:
|
||||
c->cputype = CPU_5KE;
|
||||
__cpu_name[cpu] = "MIPS 5KE";
|
||||
break;
|
||||
case PRID_IMP_20KC:
|
||||
c->cputype = CPU_20KC;
|
||||
__cpu_name[cpu] = "MIPS 20Kc";
|
||||
@@ -831,6 +836,10 @@ static inline void cpu_probe_mips(struct cpuinfo_mips *c, unsigned int cpu)
|
||||
c->cputype = CPU_74K;
|
||||
__cpu_name[cpu] = "MIPS 74Kc";
|
||||
break;
|
||||
case PRID_IMP_M14KC:
|
||||
c->cputype = CPU_M14KC;
|
||||
__cpu_name[cpu] = "MIPS M14Kc";
|
||||
break;
|
||||
case PRID_IMP_1004K:
|
||||
c->cputype = CPU_1004K;
|
||||
__cpu_name[cpu] = "MIPS 1004Kc";
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Copyright (C) 1996, 97, 98, 99, 2000, 01, 03, 04, 05 by Ralf Baechle
|
||||
* Copyright (C) 1996, 97, 98, 99, 2000, 01, 03, 04, 05, 12 by Ralf Baechle
|
||||
* Copyright (C) 1999, 2000, 01 Silicon Graphics, Inc.
|
||||
*/
|
||||
#include <linux/interrupt.h>
|
||||
@@ -34,6 +34,12 @@ EXPORT_SYMBOL(memmove);
|
||||
|
||||
EXPORT_SYMBOL(kernel_thread);
|
||||
|
||||
/*
|
||||
* Functions that operate on entire pages. Mostly used by memory management.
|
||||
*/
|
||||
EXPORT_SYMBOL(clear_page);
|
||||
EXPORT_SYMBOL(copy_page);
|
||||
|
||||
/*
|
||||
* Userspace access stuff.
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
/*
|
||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||
* struct thread_info *next_ti)
|
||||
* struct thread_info *next_ti, int usedfpu)
|
||||
*/
|
||||
.align 7
|
||||
LEAF(resume)
|
||||
|
||||
@@ -162,11 +162,6 @@ static unsigned int counters_total_to_per_cpu(unsigned int counters)
|
||||
return counters >> vpe_shift();
|
||||
}
|
||||
|
||||
static unsigned int counters_per_cpu_to_total(unsigned int counters)
|
||||
{
|
||||
return counters << vpe_shift();
|
||||
}
|
||||
|
||||
#else /* !CONFIG_MIPS_MT_SMP */
|
||||
#define vpe_id() 0
|
||||
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
/*
|
||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||
* struct thread_info *next_ti) )
|
||||
* struct thread_info *next_ti, int usedfpu)
|
||||
*/
|
||||
LEAF(resume)
|
||||
mfc0 t1, CP0_STATUS
|
||||
@@ -51,18 +51,9 @@ LEAF(resume)
|
||||
cpu_save_nonscratch a0
|
||||
sw ra, THREAD_REG31(a0)
|
||||
|
||||
/*
|
||||
* check if we need to save FPU registers
|
||||
*/
|
||||
lw t3, TASK_THREAD_INFO(a0)
|
||||
lw t0, TI_FLAGS(t3)
|
||||
li t1, _TIF_USEDFPU
|
||||
and t2, t0, t1
|
||||
beqz t2, 1f
|
||||
nor t1, zero, t1
|
||||
beqz a3, 1f
|
||||
|
||||
and t0, t0, t1
|
||||
sw t0, TI_FLAGS(t3)
|
||||
PTR_L t3, TASK_THREAD_INFO(a0)
|
||||
|
||||
/*
|
||||
* clear saved user stack CU1 bit
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
|
||||
/*
|
||||
* task_struct *resume(task_struct *prev, task_struct *next,
|
||||
* struct thread_info *next_ti)
|
||||
* struct thread_info *next_ti, int usedfpu)
|
||||
*/
|
||||
.align 5
|
||||
LEAF(resume)
|
||||
@@ -53,16 +53,10 @@
|
||||
/*
|
||||
* check if we need to save FPU registers
|
||||
*/
|
||||
|
||||
beqz a3, 1f
|
||||
|
||||
PTR_L t3, TASK_THREAD_INFO(a0)
|
||||
LONG_L t0, TI_FLAGS(t3)
|
||||
li t1, _TIF_USEDFPU
|
||||
and t2, t0, t1
|
||||
beqz t2, 1f
|
||||
nor t1, zero, t1
|
||||
|
||||
and t0, t0, t1
|
||||
LONG_S t0, TI_FLAGS(t3)
|
||||
|
||||
/*
|
||||
* clear saved user stack CU1 bit
|
||||
*/
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include <linux/smp.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/cpu.h>
|
||||
#include <linux/cpumask.h>
|
||||
#include <linux/reboot.h>
|
||||
@@ -197,13 +196,6 @@ static void bmips_init_secondary(void)
|
||||
|
||||
write_c0_brcm_action(ACTION_CLR_IPI(smp_processor_id(), 0));
|
||||
#endif
|
||||
|
||||
/* make sure there won't be a timer interrupt for a little while */
|
||||
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
||||
|
||||
irq_enable_hazard();
|
||||
set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ1 | IE_IRQ5 | ST0_IE);
|
||||
irq_enable_hazard();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -212,6 +204,13 @@ static void bmips_init_secondary(void)
|
||||
static void bmips_smp_finish(void)
|
||||
{
|
||||
pr_info("SMP: CPU%d is running\n", smp_processor_id());
|
||||
|
||||
/* make sure there won't be a timer interrupt for a little while */
|
||||
write_c0_compare(read_c0_count() + mips_hpt_frequency / HZ);
|
||||
|
||||
irq_enable_hazard();
|
||||
set_c0_status(IE_SW0 | IE_SW1 | IE_IRQ1 | IE_IRQ5 | ST0_IE);
|
||||
irq_enable_hazard();
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -122,13 +122,21 @@ asmlinkage __cpuinit void start_secondary(void)
|
||||
|
||||
notify_cpu_starting(cpu);
|
||||
|
||||
mp_ops->smp_finish();
|
||||
set_cpu_online(cpu, true);
|
||||
|
||||
set_cpu_sibling_map(cpu);
|
||||
|
||||
cpu_set(cpu, cpu_callin_map);
|
||||
|
||||
synchronise_count_slave();
|
||||
|
||||
/*
|
||||
* irq will be enabled in ->smp_finish(), enabling it too early
|
||||
* is dangerous.
|
||||
*/
|
||||
WARN_ON_ONCE(!irqs_disabled());
|
||||
mp_ops->smp_finish();
|
||||
|
||||
cpu_idle();
|
||||
}
|
||||
|
||||
@@ -196,8 +204,6 @@ int __cpuinit __cpu_up(unsigned int cpu, struct task_struct *tidle)
|
||||
while (!cpu_isset(cpu, cpu_callin_map))
|
||||
udelay(100);
|
||||
|
||||
set_cpu_online(cpu, true);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -322,7 +322,7 @@ int __init smtc_build_cpu_map(int start_cpu_slot)
|
||||
|
||||
/*
|
||||
* Common setup before any secondaries are started
|
||||
* Make sure all CPU's are in a sensible state before we boot any of the
|
||||
* Make sure all CPUs are in a sensible state before we boot any of the
|
||||
* secondaries.
|
||||
*
|
||||
* For MIPS MT "SMTC" operation, we set up all TCs, spread as evenly
|
||||
@@ -340,12 +340,12 @@ static void smtc_tc_setup(int vpe, int tc, int cpu)
|
||||
/*
|
||||
* TCContext gets an offset from the base of the IPIQ array
|
||||
* to be used in low-level code to detect the presence of
|
||||
* an active IPI queue
|
||||
* an active IPI queue.
|
||||
*/
|
||||
write_tc_c0_tccontext((sizeof(struct smtc_ipi_q) * cpu) << 16);
|
||||
/* Bind tc to vpe */
|
||||
write_tc_c0_tcbind(vpe);
|
||||
/* In general, all TCs should have the same cpu_data indications */
|
||||
/* In general, all TCs should have the same cpu_data indications. */
|
||||
memcpy(&cpu_data[cpu], &cpu_data[0], sizeof(struct cpuinfo_mips));
|
||||
/* For 34Kf, start with TC/CPU 0 as sole owner of single FPU context */
|
||||
if (cpu_data[0].cputype == CPU_34K ||
|
||||
@@ -358,8 +358,8 @@ static void smtc_tc_setup(int vpe, int tc, int cpu)
|
||||
}
|
||||
|
||||
/*
|
||||
* Tweak to get Count registes in as close a sync as possible.
|
||||
* Value seems good for 34K-class cores.
|
||||
* Tweak to get Count registes in as close a sync as possible. The
|
||||
* value seems good for 34K-class cores.
|
||||
*/
|
||||
|
||||
#define CP0_SKEW 8
|
||||
@@ -615,7 +615,6 @@ void __cpuinit smtc_boot_secondary(int cpu, struct task_struct *idle)
|
||||
|
||||
void smtc_init_secondary(void)
|
||||
{
|
||||
local_irq_enable();
|
||||
}
|
||||
|
||||
void smtc_smp_finish(void)
|
||||
@@ -631,6 +630,8 @@ void smtc_smp_finish(void)
|
||||
if (cpu > 0 && (cpu_data[cpu].vpe_id != cpu_data[cpu - 1].vpe_id))
|
||||
write_c0_compare(read_c0_count() + mips_hpt_frequency/HZ);
|
||||
|
||||
local_irq_enable();
|
||||
|
||||
printk("TC %d going on-line as CPU %d\n",
|
||||
cpu_data[smp_processor_id()].tc_id, smp_processor_id());
|
||||
}
|
||||
|
||||
@@ -111,7 +111,6 @@ void __cpuinit synchronise_count_master(void)
|
||||
void __cpuinit synchronise_count_slave(void)
|
||||
{
|
||||
int i;
|
||||
unsigned long flags;
|
||||
unsigned int initcount;
|
||||
int ncpus;
|
||||
|
||||
@@ -123,8 +122,6 @@ void __cpuinit synchronise_count_slave(void)
|
||||
return;
|
||||
#endif
|
||||
|
||||
local_irq_save(flags);
|
||||
|
||||
/*
|
||||
* Not every cpu is online at the time this gets called,
|
||||
* so we first wait for the master to say everyone is ready
|
||||
@@ -154,7 +151,5 @@ void __cpuinit synchronise_count_slave(void)
|
||||
}
|
||||
/* Arrange for an interrupt in a short while */
|
||||
write_c0_compare(read_c0_count() + COUNTON);
|
||||
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
#undef NR_LOOPS
|
||||
|
||||
@@ -132,6 +132,9 @@ static void show_backtrace(struct task_struct *task, const struct pt_regs *regs)
|
||||
unsigned long ra = regs->regs[31];
|
||||
unsigned long pc = regs->cp0_epc;
|
||||
|
||||
if (!task)
|
||||
task = current;
|
||||
|
||||
if (raw_show_trace || !__kernel_text_address(pc)) {
|
||||
show_raw_backtrace(sp);
|
||||
return;
|
||||
@@ -1249,6 +1252,7 @@ static inline void parity_protection_init(void)
|
||||
break;
|
||||
|
||||
case CPU_5KC:
|
||||
case CPU_5KE:
|
||||
write_c0_ecc(0x80000000);
|
||||
back_to_back_c0_hazard();
|
||||
/* Set the PE bit (bit 31) in the c0_errctl register. */
|
||||
@@ -1498,6 +1502,7 @@ extern void flush_tlb_handlers(void);
|
||||
* Timer interrupt
|
||||
*/
|
||||
int cp0_compare_irq;
|
||||
EXPORT_SYMBOL_GPL(cp0_compare_irq);
|
||||
int cp0_compare_irq_shift;
|
||||
|
||||
/*
|
||||
@@ -1597,7 +1602,7 @@ void __cpuinit per_cpu_trap_init(bool is_boot_cpu)
|
||||
cp0_perfcount_irq = -1;
|
||||
} else {
|
||||
cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
|
||||
cp0_compare_irq_shift = cp0_compare_irq;
|
||||
cp0_compare_irq_shift = CP0_LEGACY_PERFCNT_IRQ;
|
||||
cp0_perfcount_irq = -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#include <asm/asm-offsets.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm-generic/vmlinux.lds.h>
|
||||
|
||||
#undef mips
|
||||
@@ -72,7 +73,7 @@ SECTIONS
|
||||
.data : { /* Data */
|
||||
. = . + DATAOFFSET; /* for CONFIG_MAPPED_KERNEL */
|
||||
|
||||
INIT_TASK_DATA(PAGE_SIZE)
|
||||
INIT_TASK_DATA(THREAD_SIZE)
|
||||
NOSAVE_DATA
|
||||
CACHELINE_ALIGNED_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||
READ_MOSTLY_DATA(1 << CONFIG_MIPS_L1_CACHE_SHIFT)
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
#
|
||||
|
||||
obj-y += cache.o dma-default.o extable.o fault.o \
|
||||
gup.o init.o mmap.o page.o tlbex.o \
|
||||
tlbex-fault.o uasm.o
|
||||
gup.o init.o mmap.o page.o page-funcs.o \
|
||||
tlbex.o tlbex-fault.o uasm.o
|
||||
|
||||
obj-$(CONFIG_32BIT) += ioremap.o pgtable-32.o
|
||||
obj-$(CONFIG_64BIT) += pgtable-64.o
|
||||
|
||||
@@ -977,7 +977,7 @@ static void __cpuinit probe_pcache(void)
|
||||
c->icache.linesz = 2 << lsize;
|
||||
else
|
||||
c->icache.linesz = lsize;
|
||||
c->icache.sets = 64 << ((config1 >> 22) & 7);
|
||||
c->icache.sets = 32 << (((config1 >> 22) + 1) & 7);
|
||||
c->icache.ways = 1 + ((config1 >> 16) & 7);
|
||||
|
||||
icache_size = c->icache.sets *
|
||||
@@ -997,7 +997,7 @@ static void __cpuinit probe_pcache(void)
|
||||
c->dcache.linesz = 2 << lsize;
|
||||
else
|
||||
c->dcache.linesz= lsize;
|
||||
c->dcache.sets = 64 << ((config1 >> 13) & 7);
|
||||
c->dcache.sets = 32 << (((config1 >> 13) + 1) & 7);
|
||||
c->dcache.ways = 1 + ((config1 >> 7) & 7);
|
||||
|
||||
dcache_size = c->dcache.sets *
|
||||
@@ -1051,6 +1051,7 @@ static void __cpuinit probe_pcache(void)
|
||||
case CPU_R14000:
|
||||
break;
|
||||
|
||||
case CPU_M14KC:
|
||||
case CPU_24K:
|
||||
case CPU_34K:
|
||||
case CPU_74K:
|
||||
|
||||
50
arch/mips/mm/page-funcs.S
Normal file
50
arch/mips/mm/page-funcs.S
Normal file
@@ -0,0 +1,50 @@
|
||||
/*
|
||||
* This file is subject to the terms and conditions of the GNU General Public
|
||||
* License. See the file "COPYING" in the main directory of this archive
|
||||
* for more details.
|
||||
*
|
||||
* Micro-assembler generated clear_page/copy_page functions.
|
||||
*
|
||||
* Copyright (C) 2012 MIPS Technologies, Inc.
|
||||
* Copyright (C) 2012 Ralf Baechle <ralf@linux-mips.org>
|
||||
*/
|
||||
#include <asm/asm.h>
|
||||
#include <asm/regdef.h>
|
||||
|
||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||
#define cpu_clear_page_function_name clear_page_cpu
|
||||
#define cpu_copy_page_function_name copy_page_cpu
|
||||
#else
|
||||
#define cpu_clear_page_function_name clear_page
|
||||
#define cpu_copy_page_function_name copy_page
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Maximum sizes:
|
||||
*
|
||||
* R4000 128 bytes S-cache: 0x058 bytes
|
||||
* R4600 v1.7: 0x05c bytes
|
||||
* R4600 v2.0: 0x060 bytes
|
||||
* With prefetching, 16 word strides 0x120 bytes
|
||||
*/
|
||||
EXPORT(__clear_page_start)
|
||||
LEAF(cpu_clear_page_function_name)
|
||||
1: j 1b /* Dummy, will be replaced. */
|
||||
.space 288
|
||||
END(cpu_clear_page_function_name)
|
||||
EXPORT(__clear_page_end)
|
||||
|
||||
/*
|
||||
* Maximum sizes:
|
||||
*
|
||||
* R4000 128 bytes S-cache: 0x11c bytes
|
||||
* R4600 v1.7: 0x080 bytes
|
||||
* R4600 v2.0: 0x07c bytes
|
||||
* With prefetching, 16 word strides 0x540 bytes
|
||||
*/
|
||||
EXPORT(__copy_page_start)
|
||||
LEAF(cpu_copy_page_function_name)
|
||||
1: j 1b /* Dummy, will be replaced. */
|
||||
.space 1344
|
||||
END(cpu_copy_page_function_name)
|
||||
EXPORT(__copy_page_end)
|
||||
@@ -6,6 +6,7 @@
|
||||
* Copyright (C) 2003, 04, 05 Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2007 Maciej W. Rozycki
|
||||
* Copyright (C) 2008 Thiemo Seufer
|
||||
* Copyright (C) 2012 MIPS Technologies, Inc.
|
||||
*/
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
@@ -71,45 +72,6 @@ static struct uasm_reloc __cpuinitdata relocs[5];
|
||||
#define cpu_is_r4600_v1_x() ((read_c0_prid() & 0xfffffff0) == 0x00002010)
|
||||
#define cpu_is_r4600_v2_x() ((read_c0_prid() & 0xfffffff0) == 0x00002020)
|
||||
|
||||
/*
|
||||
* Maximum sizes:
|
||||
*
|
||||
* R4000 128 bytes S-cache: 0x058 bytes
|
||||
* R4600 v1.7: 0x05c bytes
|
||||
* R4600 v2.0: 0x060 bytes
|
||||
* With prefetching, 16 word strides 0x120 bytes
|
||||
*/
|
||||
|
||||
static u32 clear_page_array[0x120 / 4];
|
||||
|
||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||
void clear_page_cpu(void *page) __attribute__((alias("clear_page_array")));
|
||||
#else
|
||||
void clear_page(void *page) __attribute__((alias("clear_page_array")));
|
||||
#endif
|
||||
|
||||
EXPORT_SYMBOL(clear_page);
|
||||
|
||||
/*
|
||||
* Maximum sizes:
|
||||
*
|
||||
* R4000 128 bytes S-cache: 0x11c bytes
|
||||
* R4600 v1.7: 0x080 bytes
|
||||
* R4600 v2.0: 0x07c bytes
|
||||
* With prefetching, 16 word strides 0x540 bytes
|
||||
*/
|
||||
static u32 copy_page_array[0x540 / 4];
|
||||
|
||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||
void
|
||||
copy_page_cpu(void *to, void *from) __attribute__((alias("copy_page_array")));
|
||||
#else
|
||||
void copy_page(void *to, void *from) __attribute__((alias("copy_page_array")));
|
||||
#endif
|
||||
|
||||
EXPORT_SYMBOL(copy_page);
|
||||
|
||||
|
||||
static int pref_bias_clear_store __cpuinitdata;
|
||||
static int pref_bias_copy_load __cpuinitdata;
|
||||
static int pref_bias_copy_store __cpuinitdata;
|
||||
@@ -282,10 +244,15 @@ static inline void __cpuinit build_clear_pref(u32 **buf, int off)
|
||||
}
|
||||
}
|
||||
|
||||
extern u32 __clear_page_start;
|
||||
extern u32 __clear_page_end;
|
||||
extern u32 __copy_page_start;
|
||||
extern u32 __copy_page_end;
|
||||
|
||||
void __cpuinit build_clear_page(void)
|
||||
{
|
||||
int off;
|
||||
u32 *buf = (u32 *)&clear_page_array;
|
||||
u32 *buf = &__clear_page_start;
|
||||
struct uasm_label *l = labels;
|
||||
struct uasm_reloc *r = relocs;
|
||||
int i;
|
||||
@@ -356,17 +323,17 @@ void __cpuinit build_clear_page(void)
|
||||
uasm_i_jr(&buf, RA);
|
||||
uasm_i_nop(&buf);
|
||||
|
||||
BUG_ON(buf > clear_page_array + ARRAY_SIZE(clear_page_array));
|
||||
BUG_ON(buf > &__clear_page_end);
|
||||
|
||||
uasm_resolve_relocs(relocs, labels);
|
||||
|
||||
pr_debug("Synthesized clear page handler (%u instructions).\n",
|
||||
(u32)(buf - clear_page_array));
|
||||
(u32)(buf - &__clear_page_start));
|
||||
|
||||
pr_debug("\t.set push\n");
|
||||
pr_debug("\t.set noreorder\n");
|
||||
for (i = 0; i < (buf - clear_page_array); i++)
|
||||
pr_debug("\t.word 0x%08x\n", clear_page_array[i]);
|
||||
for (i = 0; i < (buf - &__clear_page_start); i++)
|
||||
pr_debug("\t.word 0x%08x\n", (&__clear_page_start)[i]);
|
||||
pr_debug("\t.set pop\n");
|
||||
}
|
||||
|
||||
@@ -427,7 +394,7 @@ static inline void build_copy_store_pref(u32 **buf, int off)
|
||||
void __cpuinit build_copy_page(void)
|
||||
{
|
||||
int off;
|
||||
u32 *buf = (u32 *)©_page_array;
|
||||
u32 *buf = &__copy_page_start;
|
||||
struct uasm_label *l = labels;
|
||||
struct uasm_reloc *r = relocs;
|
||||
int i;
|
||||
@@ -595,21 +562,23 @@ void __cpuinit build_copy_page(void)
|
||||
uasm_i_jr(&buf, RA);
|
||||
uasm_i_nop(&buf);
|
||||
|
||||
BUG_ON(buf > copy_page_array + ARRAY_SIZE(copy_page_array));
|
||||
BUG_ON(buf > &__copy_page_end);
|
||||
|
||||
uasm_resolve_relocs(relocs, labels);
|
||||
|
||||
pr_debug("Synthesized copy page handler (%u instructions).\n",
|
||||
(u32)(buf - copy_page_array));
|
||||
(u32)(buf - &__copy_page_start));
|
||||
|
||||
pr_debug("\t.set push\n");
|
||||
pr_debug("\t.set noreorder\n");
|
||||
for (i = 0; i < (buf - copy_page_array); i++)
|
||||
pr_debug("\t.word 0x%08x\n", copy_page_array[i]);
|
||||
for (i = 0; i < (buf - &__copy_page_start); i++)
|
||||
pr_debug("\t.word 0x%08x\n", (&__copy_page_start)[i]);
|
||||
pr_debug("\t.set pop\n");
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SIBYTE_DMA_PAGEOPS
|
||||
extern void clear_page_cpu(void *page);
|
||||
extern void copy_page_cpu(void *to, void *from);
|
||||
|
||||
/*
|
||||
* Pad descriptors to cacheline, since each is exclusively owned by a
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
* Copyright (C) 2005, 2007, 2008, 2009 Maciej W. Rozycki
|
||||
* Copyright (C) 2006 Ralf Baechle (ralf@linux-mips.org)
|
||||
* Copyright (C) 2008, 2009 Cavium Networks, Inc.
|
||||
* Copyright (C) 2011 MIPS Technologies, Inc.
|
||||
*
|
||||
* ... and the days got worse and worse and now you see
|
||||
* I've gone completly out of my mind.
|
||||
@@ -494,6 +495,7 @@ static void __cpuinit build_tlb_write_entry(u32 **p, struct uasm_label **l,
|
||||
case CPU_R14000:
|
||||
case CPU_4KC:
|
||||
case CPU_4KEC:
|
||||
case CPU_M14KC:
|
||||
case CPU_SB1:
|
||||
case CPU_SB1A:
|
||||
case CPU_4KSC:
|
||||
|
||||
@@ -241,8 +241,9 @@ void __init mips_pcibios_init(void)
|
||||
return;
|
||||
}
|
||||
|
||||
if (controller->io_resource->start < 0x00001000UL) /* FIXME */
|
||||
controller->io_resource->start = 0x00001000UL;
|
||||
/* Change start address to avoid conflicts with ACPI and SMB devices */
|
||||
if (controller->io_resource->start < 0x00002000UL)
|
||||
controller->io_resource->start = 0x00002000UL;
|
||||
|
||||
iomem_resource.end &= 0xfffffffffULL; /* 64 GB */
|
||||
ioport_resource.end = controller->io_resource->end;
|
||||
@@ -253,7 +254,7 @@ void __init mips_pcibios_init(void)
|
||||
}
|
||||
|
||||
/* Enable PCI 2.1 compatibility in PIIX4 */
|
||||
static void __init quirk_dlcsetup(struct pci_dev *dev)
|
||||
static void __devinit quirk_dlcsetup(struct pci_dev *dev)
|
||||
{
|
||||
u8 odlc, ndlc;
|
||||
(void) pci_read_config_byte(dev, 0x82, &odlc);
|
||||
|
||||
@@ -111,7 +111,7 @@ static void __init pci_clock_check(void)
|
||||
unsigned int __iomem *jmpr_p =
|
||||
(unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
|
||||
int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
|
||||
static const int pciclocks[] __initdata = {
|
||||
static const int pciclocks[] __initconst = {
|
||||
33, 20, 25, 30, 12, 16, 37, 10
|
||||
};
|
||||
int pciclock = pciclocks[jmpr];
|
||||
|
||||
@@ -82,8 +82,10 @@ void __init prom_free_prom_memory(void)
|
||||
|
||||
void xlp_mmu_init(void)
|
||||
{
|
||||
/* enable extended TLB and Large Fixed TLB */
|
||||
write_c0_config6(read_c0_config6() | 0x24);
|
||||
current_cpu_data.tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1;
|
||||
|
||||
/* set page mask of Fixed TLB in config7 */
|
||||
write_c0_config7(PM_DEFAULT_MASK >>
|
||||
(13 + (ffz(PM_DEFAULT_MASK >> 13) / 2)));
|
||||
}
|
||||
@@ -100,6 +102,10 @@ void __init prom_init(void)
|
||||
nlm_common_ebase = read_c0_ebase() & (~((1 << 12) - 1));
|
||||
#ifdef CONFIG_SMP
|
||||
nlm_wakeup_secondary_cpus(0xffffffff);
|
||||
|
||||
/* update TLB size after waking up threads */
|
||||
current_cpu_data.tlbsize = ((read_c0_config6() >> 16) & 0xffff) + 1;
|
||||
|
||||
register_smp_ops(&nlm_smp_ops);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -78,6 +78,7 @@ int __init oprofile_arch_init(struct oprofile_operations *ops)
|
||||
|
||||
switch (current_cpu_type()) {
|
||||
case CPU_5KC:
|
||||
case CPU_M14KC:
|
||||
case CPU_20KC:
|
||||
case CPU_24K:
|
||||
case CPU_25KF:
|
||||
|
||||
@@ -322,6 +322,10 @@ static int __init mipsxx_init(void)
|
||||
|
||||
op_model_mipsxx_ops.num_counters = counters;
|
||||
switch (current_cpu_type()) {
|
||||
case CPU_M14KC:
|
||||
op_model_mipsxx_ops.cpu_type = "mips/M14Kc";
|
||||
break;
|
||||
|
||||
case CPU_20KC:
|
||||
op_model_mipsxx_ops.cpu_type = "mips/20K";
|
||||
break;
|
||||
|
||||
@@ -48,7 +48,7 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init loongson2e_nec_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_nec_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
@@ -60,7 +60,7 @@ static void __init loongson2e_nec_fixup(struct pci_dev *pdev)
|
||||
pci_write_config_dword(pdev, 0xe4, 1 << 5);
|
||||
}
|
||||
|
||||
static void __init loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned char c;
|
||||
|
||||
@@ -135,7 +135,7 @@ static void __init loongson2e_686b_func0_fixup(struct pci_dev *pdev)
|
||||
printk(KERN_INFO"via686b fix: ISA bridge done\n");
|
||||
}
|
||||
|
||||
static void __init loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
printk(KERN_INFO"via686b fix: IDE\n");
|
||||
|
||||
@@ -168,19 +168,19 @@ static void __init loongson2e_686b_func1_fixup(struct pci_dev *pdev)
|
||||
printk(KERN_INFO"via686b fix: IDE done\n");
|
||||
}
|
||||
|
||||
static void __init loongson2e_686b_func2_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_686b_func2_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* irq routing */
|
||||
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 10);
|
||||
}
|
||||
|
||||
static void __init loongson2e_686b_func3_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_686b_func3_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* irq routing */
|
||||
pci_write_config_byte(pdev, PCI_INTERRUPT_LINE, 11);
|
||||
}
|
||||
|
||||
static void __init loongson2e_686b_func5_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson2e_686b_func5_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned int val;
|
||||
unsigned char c;
|
||||
|
||||
@@ -96,21 +96,21 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
}
|
||||
|
||||
/* CS5536 SPEC. fixup */
|
||||
static void __init loongson_cs5536_isa_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_cs5536_isa_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* the uart1 and uart2 interrupt in PIC is enabled as default */
|
||||
pci_write_config_dword(pdev, PCI_UART1_INT_REG, 1);
|
||||
pci_write_config_dword(pdev, PCI_UART2_INT_REG, 1);
|
||||
}
|
||||
|
||||
static void __init loongson_cs5536_ide_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_cs5536_ide_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* setting the mutex pin as IDE function */
|
||||
pci_write_config_dword(pdev, PCI_IDE_CFG_REG,
|
||||
CS5536_IDE_FLASH_SIGNATURE);
|
||||
}
|
||||
|
||||
static void __init loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* enable the AUDIO interrupt in PIC */
|
||||
pci_write_config_dword(pdev, PCI_ACC_INT_REG, 1);
|
||||
@@ -118,14 +118,14 @@ static void __init loongson_cs5536_acc_fixup(struct pci_dev *pdev)
|
||||
pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0xc0);
|
||||
}
|
||||
|
||||
static void __init loongson_cs5536_ohci_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_cs5536_ohci_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
/* enable the OHCI interrupt in PIC */
|
||||
/* THE OHCI, EHCI, UDC, OTG are shared with interrupt in PIC */
|
||||
pci_write_config_dword(pdev, PCI_OHCI_INT_REG, 1);
|
||||
}
|
||||
|
||||
static void __init loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
u32 hi, lo;
|
||||
|
||||
@@ -137,7 +137,7 @@ static void __init loongson_cs5536_ehci_fixup(struct pci_dev *pdev)
|
||||
pci_write_config_dword(pdev, PCI_EHCI_FLADJ_REG, 0x2000);
|
||||
}
|
||||
|
||||
static void __init loongson_nec_fixup(struct pci_dev *pdev)
|
||||
static void __devinit loongson_nec_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
|
||||
@@ -49,10 +49,10 @@ int pcibios_plat_dev_init(struct pci_dev *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void __init malta_piix_func0_fixup(struct pci_dev *pdev)
|
||||
static void __devinit malta_piix_func0_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned char reg_val;
|
||||
static int piixirqmap[16] __initdata = { /* PIIX PIRQC[A:D] irq mappings */
|
||||
static int piixirqmap[16] __devinitdata = { /* PIIX PIRQC[A:D] irq mappings */
|
||||
0, 0, 0, 3,
|
||||
4, 5, 6, 7,
|
||||
0, 9, 10, 11,
|
||||
@@ -83,7 +83,7 @@ static void __init malta_piix_func0_fixup(struct pci_dev *pdev)
|
||||
DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82371AB_0,
|
||||
malta_piix_func0_fixup);
|
||||
|
||||
static void __init malta_piix_func1_fixup(struct pci_dev *pdev)
|
||||
static void __devinit malta_piix_func1_fixup(struct pci_dev *pdev)
|
||||
{
|
||||
unsigned char reg_val;
|
||||
|
||||
|
||||
@@ -22,13 +22,13 @@
|
||||
|
||||
#include <asm/vr41xx/mpc30x.h>
|
||||
|
||||
static const int internal_func_irqs[] __initdata = {
|
||||
static const int internal_func_irqs[] __initconst = {
|
||||
VRC4173_CASCADE_IRQ,
|
||||
VRC4173_AC97_IRQ,
|
||||
VRC4173_USB_IRQ,
|
||||
};
|
||||
|
||||
static const int irq_tab_mpc30x[] __initdata = {
|
||||
static const int irq_tab_mpc30x[] __initconst = {
|
||||
[12] = VRC4173_PCMCIA1_IRQ,
|
||||
[13] = VRC4173_PCMCIA2_IRQ,
|
||||
[29] = MQ200_IRQ,
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* Set the BCM1250, etc. PCI host bridge's TRDY timeout
|
||||
* to the finite max.
|
||||
*/
|
||||
static void __init quirk_sb1250_pci(struct pci_dev *dev)
|
||||
static void __devinit quirk_sb1250_pci(struct pci_dev *dev)
|
||||
{
|
||||
pci_write_config_byte(dev, 0x40, 0xff);
|
||||
}
|
||||
@@ -25,7 +25,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_PCI,
|
||||
/*
|
||||
* The BCM1250, etc. PCI/HT bridge reports as a host bridge.
|
||||
*/
|
||||
static void __init quirk_sb1250_ht(struct pci_dev *dev)
|
||||
static void __devinit quirk_sb1250_ht(struct pci_dev *dev)
|
||||
{
|
||||
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
|
||||
}
|
||||
@@ -35,7 +35,7 @@ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIBYTE, PCI_DEVICE_ID_BCM1250_HT,
|
||||
/*
|
||||
* Set the SP1011 HT/PCI bridge's TRDY timeout to the finite max.
|
||||
*/
|
||||
static void __init quirk_sp1011(struct pci_dev *dev)
|
||||
static void __devinit quirk_sp1011(struct pci_dev *dev)
|
||||
{
|
||||
pci_write_config_byte(dev, 0x64, 0xff);
|
||||
}
|
||||
|
||||
@@ -495,7 +495,7 @@ irqreturn_t tx4927_pcierr_interrupt(int irq, void *dev_id)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_TOSHIBA_FPCIB0
|
||||
static void __init tx4927_quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||
static void __devinit tx4927_quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||
{
|
||||
struct tx4927_pcic_reg __iomem *pcicptr = pci_bus_to_pcicptr(dev->bus);
|
||||
|
||||
|
||||
@@ -212,7 +212,7 @@ static inline void pci_enable_swapping(struct pci_dev *dev)
|
||||
bridge->b_widget.w_tflush; /* Flush */
|
||||
}
|
||||
|
||||
static void __init pci_fixup_ioc3(struct pci_dev *d)
|
||||
static void __devinit pci_fixup_ioc3(struct pci_dev *d)
|
||||
{
|
||||
pci_disable_swapping(d);
|
||||
}
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/irqdesc.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/pci_regs.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
@@ -156,35 +157,55 @@ struct pci_controller nlm_pci_controller = {
|
||||
.io_offset = 0x00000000UL,
|
||||
};
|
||||
|
||||
/*
|
||||
* The top level PCIe links on the XLS PCIe controller appear as
|
||||
* bridges. Given a device, this function finds which link it is
|
||||
* on.
|
||||
*/
|
||||
static struct pci_dev *xls_get_pcie_link(const struct pci_dev *dev)
|
||||
{
|
||||
struct pci_bus *bus, *p;
|
||||
|
||||
/* Find the bridge on bus 0 */
|
||||
bus = dev->bus;
|
||||
for (p = bus->parent; p && p->number != 0; p = p->parent)
|
||||
bus = p;
|
||||
|
||||
return p ? bus->self : NULL;
|
||||
}
|
||||
|
||||
static int get_irq_vector(const struct pci_dev *dev)
|
||||
{
|
||||
struct pci_dev *lnk;
|
||||
|
||||
if (!nlm_chip_is_xls())
|
||||
return PIC_PCIX_IRQ; /* for XLR just one IRQ*/
|
||||
return PIC_PCIX_IRQ; /* for XLR just one IRQ */
|
||||
|
||||
/*
|
||||
* For XLS PCIe, there is an IRQ per Link, find out which
|
||||
* link the device is on to assign interrupts
|
||||
*/
|
||||
if (dev->bus->self == NULL)
|
||||
*/
|
||||
lnk = xls_get_pcie_link(dev);
|
||||
if (lnk == NULL)
|
||||
return 0;
|
||||
|
||||
switch (dev->bus->self->devfn) {
|
||||
case 0x0:
|
||||
switch (PCI_SLOT(lnk->devfn)) {
|
||||
case 0:
|
||||
return PIC_PCIE_LINK0_IRQ;
|
||||
case 0x8:
|
||||
case 1:
|
||||
return PIC_PCIE_LINK1_IRQ;
|
||||
case 0x10:
|
||||
case 2:
|
||||
if (nlm_chip_is_xls_b())
|
||||
return PIC_PCIE_XLSB0_LINK2_IRQ;
|
||||
else
|
||||
return PIC_PCIE_LINK2_IRQ;
|
||||
case 0x18:
|
||||
case 3:
|
||||
if (nlm_chip_is_xls_b())
|
||||
return PIC_PCIE_XLSB0_LINK3_IRQ;
|
||||
else
|
||||
return PIC_PCIE_LINK3_IRQ;
|
||||
}
|
||||
WARN(1, "Unexpected devfn %d\n", dev->bus->self->devfn);
|
||||
WARN(1, "Unexpected devfn %d\n", lnk->devfn);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -202,7 +223,27 @@ void arch_teardown_msi_irq(unsigned int irq)
|
||||
int arch_setup_msi_irq(struct pci_dev *dev, struct msi_desc *desc)
|
||||
{
|
||||
struct msi_msg msg;
|
||||
struct pci_dev *lnk;
|
||||
int irq, ret;
|
||||
u16 val;
|
||||
|
||||
/* MSI not supported on XLR */
|
||||
if (!nlm_chip_is_xls())
|
||||
return 1;
|
||||
|
||||
/*
|
||||
* Enable MSI on the XLS PCIe controller bridge which was disabled
|
||||
* at enumeration, the bridge MSI capability is at 0x50
|
||||
*/
|
||||
lnk = xls_get_pcie_link(dev);
|
||||
if (lnk == NULL)
|
||||
return 1;
|
||||
|
||||
pci_read_config_word(lnk, 0x50 + PCI_MSI_FLAGS, &val);
|
||||
if ((val & PCI_MSI_FLAGS_ENABLE) == 0) {
|
||||
val |= PCI_MSI_FLAGS_ENABLE;
|
||||
pci_write_config_word(lnk, 0x50 + PCI_MSI_FLAGS, val);
|
||||
}
|
||||
|
||||
irq = get_irq_vector(dev);
|
||||
if (irq <= 0)
|
||||
@@ -327,7 +368,7 @@ static int __init pcibios_init(void)
|
||||
}
|
||||
} else {
|
||||
/* XLR PCI controller ACK */
|
||||
irq_set_handler_data(PIC_PCIE_XLSB0_LINK3_IRQ, xlr_pci_ack);
|
||||
irq_set_handler_data(PIC_PCIX_IRQ, xlr_pci_ack);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -115,11 +115,11 @@ static void yos_send_ipi_mask(const struct cpumask *mask, unsigned int action)
|
||||
*/
|
||||
static void __cpuinit yos_init_secondary(void)
|
||||
{
|
||||
set_c0_status(ST0_CO | ST0_IE | ST0_IM);
|
||||
}
|
||||
|
||||
static void __cpuinit yos_smp_finish(void)
|
||||
{
|
||||
set_c0_status(ST0_CO | ST0_IM | ST0_IE);
|
||||
}
|
||||
|
||||
/* Hook for after all CPUs are online */
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#define CALLIOPE_ADDR(x) (CALLIOPE_IO_BASE + (x))
|
||||
|
||||
const struct register_map calliope_register_map __initdata = {
|
||||
const struct register_map calliope_register_map __initconst = {
|
||||
.eic_slow0_strt_add = {.phys = CALLIOPE_ADDR(0x800000)},
|
||||
.eic_cfg_bits = {.phys = CALLIOPE_ADDR(0x800038)},
|
||||
.eic_ready_status = {.phys = CALLIOPE_ADDR(0x80004c)},
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#define CRONUS_ADDR(x) (CRONUS_IO_BASE + (x))
|
||||
|
||||
const struct register_map cronus_register_map __initdata = {
|
||||
const struct register_map cronus_register_map __initconst = {
|
||||
.eic_slow0_strt_add = {.phys = CRONUS_ADDR(0x000000)},
|
||||
.eic_cfg_bits = {.phys = CRONUS_ADDR(0x000038)},
|
||||
.eic_ready_status = {.phys = CRONUS_ADDR(0x00004C)},
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <asm/mach-powertv/asic.h>
|
||||
|
||||
const struct register_map gaia_register_map __initdata = {
|
||||
const struct register_map gaia_register_map __initconst = {
|
||||
.eic_slow0_strt_add = {.phys = GAIA_IO_BASE + 0x000000},
|
||||
.eic_cfg_bits = {.phys = GAIA_IO_BASE + 0x000038},
|
||||
.eic_ready_status = {.phys = GAIA_IO_BASE + 0x00004C},
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
|
||||
#define ZEUS_ADDR(x) (ZEUS_IO_BASE + (x))
|
||||
|
||||
const struct register_map zeus_register_map __initdata = {
|
||||
const struct register_map zeus_register_map __initconst = {
|
||||
.eic_slow0_strt_add = {.phys = ZEUS_ADDR(0x000000)},
|
||||
.eic_cfg_bits = {.phys = ZEUS_ADDR(0x000038)},
|
||||
.eic_ready_status = {.phys = ZEUS_ADDR(0x00004c)},
|
||||
|
||||
@@ -269,7 +269,7 @@ txx9_i8259_irq_setup(int irq)
|
||||
return err;
|
||||
}
|
||||
|
||||
static void __init quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||
static void __devinit quirk_slc90e66_bridge(struct pci_dev *dev)
|
||||
{
|
||||
int irq; /* PCI/ISA Bridge interrupt */
|
||||
u8 reg_64;
|
||||
|
||||
@@ -459,10 +459,11 @@ static int handle_signal(int sig,
|
||||
else
|
||||
ret = setup_frame(sig, ka, oldset, regs);
|
||||
if (ret)
|
||||
return;
|
||||
return ret;
|
||||
|
||||
signal_delivered(sig, info, ka, regs,
|
||||
test_thread_flag(TIF_SINGLESTEP));
|
||||
test_thread_flag(TIF_SINGLESTEP));
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <linux/wait.h>
|
||||
#include <linux/async.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <scsi/scsi_scan.h>
|
||||
|
||||
#include "base.h"
|
||||
#include "power/power.h"
|
||||
@@ -332,6 +333,7 @@ void wait_for_device_probe(void)
|
||||
/* wait for the known devices to complete their probing */
|
||||
wait_event(probe_waitqueue, atomic_read(&probe_count) == 0);
|
||||
async_synchronize_full();
|
||||
scsi_complete_async_scans();
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(wait_for_device_probe);
|
||||
|
||||
|
||||
@@ -499,7 +499,7 @@ static int rbd_header_from_disk(struct rbd_image_header *header,
|
||||
/ sizeof (*ondisk))
|
||||
return -EINVAL;
|
||||
header->snapc = kmalloc(sizeof(struct ceph_snap_context) +
|
||||
snap_count * sizeof (*ondisk),
|
||||
snap_count * sizeof(u64),
|
||||
gfp_flags);
|
||||
if (!header->snapc)
|
||||
return -ENOMEM;
|
||||
@@ -977,7 +977,7 @@ static void rbd_req_cb(struct ceph_osd_request *req, struct ceph_msg *msg)
|
||||
op = (void *)(replyhead + 1);
|
||||
rc = le32_to_cpu(replyhead->result);
|
||||
bytes = le64_to_cpu(op->extent.length);
|
||||
read_op = (le32_to_cpu(op->op) == CEPH_OSD_OP_READ);
|
||||
read_op = (le16_to_cpu(op->op) == CEPH_OSD_OP_READ);
|
||||
|
||||
dout("rbd_req_cb bytes=%lld readop=%d rc=%d\n", bytes, read_op, rc);
|
||||
|
||||
|
||||
@@ -345,31 +345,30 @@ static struct frac_rate_tbl gen_rtbl[] = {
|
||||
/* clock parents */
|
||||
static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
|
||||
static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
|
||||
static const char *uart0_parents[] = { "pll5_clk", "uart_synth_gate_clk", };
|
||||
static const char *c3_parents[] = { "pll5_clk", "c3_synth_gate_clk", };
|
||||
static const char *gmac_phy_input_parents[] = { "gmii_125m_pad_clk", "pll2_clk",
|
||||
static const char *uart0_parents[] = { "pll5_clk", "uart_syn_gclk", };
|
||||
static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
|
||||
static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
|
||||
"osc_25m_clk", };
|
||||
static const char *gmac_phy_parents[] = { "gmac_phy_input_mux_clk",
|
||||
"gmac_phy_synth_gate_clk", };
|
||||
static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
|
||||
static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
|
||||
static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_synth_clk", };
|
||||
static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
|
||||
static const char *i2s_src_parents[] = { "vco1div2_clk", "none", "pll3_clk",
|
||||
"i2s_src_pad_clk", };
|
||||
static const char *i2s_ref_parents[] = { "i2s_src_mux_clk", "i2s_prs1_clk", };
|
||||
static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
|
||||
static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
|
||||
"pll3_clk", };
|
||||
static const char *gen_synth2_3_parents[] = { "vco1div4_clk", "vco3div2_clk",
|
||||
"pll2_clk", };
|
||||
static const char *rmii_phy_parents[] = { "ras_tx50_clk", "none",
|
||||
"ras_pll2_clk", "ras_synth0_clk", };
|
||||
"ras_pll2_clk", "ras_syn0_clk", };
|
||||
static const char *smii_rgmii_phy_parents[] = { "none", "ras_tx125_clk",
|
||||
"ras_pll2_clk", "ras_synth0_clk", };
|
||||
static const char *uart_parents[] = { "ras_apb_clk", "gen_synth3_clk", };
|
||||
static const char *i2c_parents[] = { "ras_apb_clk", "gen_synth1_clk", };
|
||||
static const char *ssp1_parents[] = { "ras_apb_clk", "gen_synth1_clk",
|
||||
"ras_pll2_clk", "ras_syn0_clk", };
|
||||
static const char *uart_parents[] = { "ras_apb_clk", "gen_syn3_clk", };
|
||||
static const char *i2c_parents[] = { "ras_apb_clk", "gen_syn1_clk", };
|
||||
static const char *ssp1_parents[] = { "ras_apb_clk", "gen_syn1_clk",
|
||||
"ras_plclk0_clk", };
|
||||
static const char *pci_parents[] = { "ras_pll3_clk", "gen_synth2_clk", };
|
||||
static const char *tdm_parents[] = { "ras_pll3_clk", "gen_synth1_clk", };
|
||||
static const char *pci_parents[] = { "ras_pll3_clk", "gen_syn2_clk", };
|
||||
static const char *tdm_parents[] = { "ras_pll3_clk", "gen_syn1_clk", };
|
||||
|
||||
void __init spear1310_clk_init(void)
|
||||
{
|
||||
@@ -390,9 +389,9 @@ void __init spear1310_clk_init(void)
|
||||
25000000);
|
||||
clk_register_clkdev(clk, "osc_25m_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_rate(NULL, "gmii_125m_pad_clk", NULL,
|
||||
CLK_IS_ROOT, 125000000);
|
||||
clk_register_clkdev(clk, "gmii_125m_pad_clk", NULL);
|
||||
clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, CLK_IS_ROOT,
|
||||
125000000);
|
||||
clk_register_clkdev(clk, "gmii_pad_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL,
|
||||
CLK_IS_ROOT, 12288000);
|
||||
@@ -406,34 +405,34 @@ void __init spear1310_clk_init(void)
|
||||
|
||||
/* clock derived from 24 or 25 MHz osc clk */
|
||||
/* vco-pll */
|
||||
clk = clk_register_mux(NULL, "vco1_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
|
||||
SPEAR1310_PLL1_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco1_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mux_clk",
|
||||
clk_register_clkdev(clk, "vco1_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk",
|
||||
0, SPEAR1310_PLL1_CTR, SPEAR1310_PLL1_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco1_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "vco2_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
|
||||
SPEAR1310_PLL2_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco2_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mux_clk",
|
||||
clk_register_clkdev(clk, "vco2_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk",
|
||||
0, SPEAR1310_PLL2_CTR, SPEAR1310_PLL2_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco2_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll2_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "vco3_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1310_PLL_CFG,
|
||||
SPEAR1310_PLL3_CLK_SHIFT, SPEAR1310_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco3_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mux_clk",
|
||||
clk_register_clkdev(clk, "vco3_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk",
|
||||
0, SPEAR1310_PLL3_CTR, SPEAR1310_PLL3_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco3_clk", NULL);
|
||||
@@ -473,7 +472,7 @@ void __init spear1310_clk_init(void)
|
||||
/* peripherals */
|
||||
clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
|
||||
128);
|
||||
clk = clk_register_gate(NULL, "thermal_gate_clk", "thermal_clk", 0,
|
||||
clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
|
||||
SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_THSENS_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_thermal");
|
||||
@@ -500,177 +499,176 @@ void __init spear1310_clk_init(void)
|
||||
clk_register_clkdev(clk, "apb_clk", NULL);
|
||||
|
||||
/* gpt clocks */
|
||||
clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_GPT0_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt0_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt0_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT0_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt0");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_GPT1_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt1_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt1_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_GPT1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt1");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_GPT2_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt2_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt2_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
|
||||
SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt2");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_GPT3_CLK_SHIFT, SPEAR1310_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt3_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt3_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
|
||||
SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_GPT3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt3");
|
||||
|
||||
/* others */
|
||||
clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk",
|
||||
"vco1div2_clk", 0, SPEAR1310_UART_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "vco1div2_clk",
|
||||
0, SPEAR1310_UART_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents,
|
||||
clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
|
||||
ARRAY_SIZE(uart0_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_UART_CLK_SHIFT, SPEAR1310_UART_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "uart0_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart0_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart0_clk", "uart0_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_UART_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "e0000000.serial");
|
||||
|
||||
clk = clk_register_aux("sdhci_synth_clk", "sdhci_synth_gate_clk",
|
||||
clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
|
||||
"vco1div2_clk", 0, SPEAR1310_SDHCI_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "sdhci_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "sdhci_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_SDHCI_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b3000000.sdhci");
|
||||
|
||||
clk = clk_register_aux("cfxd_synth_clk", "cfxd_synth_gate_clk",
|
||||
"vco1div2_clk", 0, SPEAR1310_CFXD_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "cfxd_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "cfxd_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
|
||||
0, SPEAR1310_CFXD_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CFXD_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b2800000.cf");
|
||||
clk_register_clkdev(clk, NULL, "arasan_xd");
|
||||
|
||||
clk = clk_register_aux("c3_synth_clk", "c3_synth_gate_clk",
|
||||
"vco1div2_clk", 0, SPEAR1310_C3_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "c3_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "c3_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk",
|
||||
0, SPEAR1310_C3_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "c3_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "c3_mux_clk", c3_parents,
|
||||
clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
|
||||
ARRAY_SIZE(c3_parents), 0, SPEAR1310_PERIP_CLK_CFG,
|
||||
SPEAR1310_C3_CLK_SHIFT, SPEAR1310_C3_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "c3_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "c3_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "c3_clk", "c3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_C3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "c3");
|
||||
|
||||
/* gmac */
|
||||
clk = clk_register_mux(NULL, "gmac_phy_input_mux_clk",
|
||||
gmac_phy_input_parents,
|
||||
clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
|
||||
ARRAY_SIZE(gmac_phy_input_parents), 0,
|
||||
SPEAR1310_GMAC_CLK_CFG,
|
||||
SPEAR1310_GMAC_PHY_INPUT_CLK_SHIFT,
|
||||
SPEAR1310_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gmac_phy_input_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "phy_input_mclk", NULL);
|
||||
|
||||
clk = clk_register_aux("gmac_phy_synth_clk", "gmac_phy_synth_gate_clk",
|
||||
"gmac_phy_input_mux_clk", 0, SPEAR1310_GMAC_CLK_SYNT,
|
||||
NULL, gmac_rtbl, ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gmac_phy_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gmac_phy_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
|
||||
0, SPEAR1310_GMAC_CLK_SYNT, NULL, gmac_rtbl,
|
||||
ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "phy_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gmac_phy_mux_clk", gmac_phy_parents,
|
||||
clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
|
||||
ARRAY_SIZE(gmac_phy_parents), 0,
|
||||
SPEAR1310_PERIP_CLK_CFG, SPEAR1310_GMAC_PHY_CLK_SHIFT,
|
||||
SPEAR1310_GMAC_PHY_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "stmmacphy.0");
|
||||
|
||||
/* clcd */
|
||||
clk = clk_register_mux(NULL, "clcd_synth_mux_clk", clcd_synth_parents,
|
||||
clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
|
||||
ARRAY_SIZE(clcd_synth_parents), 0,
|
||||
SPEAR1310_CLCD_CLK_SYNT, SPEAR1310_CLCD_SYNT_CLK_SHIFT,
|
||||
SPEAR1310_CLCD_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "clcd_synth_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
|
||||
|
||||
clk = clk_register_frac("clcd_synth_clk", "clcd_synth_mux_clk", 0,
|
||||
clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
|
||||
SPEAR1310_CLCD_CLK_SYNT, clcd_rtbl,
|
||||
ARRAY_SIZE(clcd_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "clcd_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "clcd_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "clcd_pixel_mux_clk", clcd_pixel_parents,
|
||||
clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
|
||||
ARRAY_SIZE(clcd_pixel_parents), 0,
|
||||
SPEAR1310_PERIP_CLK_CFG, SPEAR1310_CLCD_CLK_SHIFT,
|
||||
SPEAR1310_CLCD_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "clcd_pixel_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_CLCD_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "clcd_clk", NULL);
|
||||
|
||||
/* i2s */
|
||||
clk = clk_register_mux(NULL, "i2s_src_mux_clk", i2s_src_parents,
|
||||
clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
|
||||
ARRAY_SIZE(i2s_src_parents), 0, SPEAR1310_I2S_CLK_CFG,
|
||||
SPEAR1310_I2S_SRC_CLK_SHIFT, SPEAR1310_I2S_SRC_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "i2s_src_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mux_clk", 0,
|
||||
clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0,
|
||||
SPEAR1310_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl,
|
||||
ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
|
||||
clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "i2s_ref_mux_clk", i2s_ref_parents,
|
||||
clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
|
||||
ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1310_I2S_CLK_CFG,
|
||||
SPEAR1310_I2S_REF_SHIFT, SPEAR1310_I2S_REF_SEL_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2s_ref_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
|
||||
SPEAR1310_PERIP2_CLK_ENB, SPEAR1310_I2S_REF_PAD_CLK_ENB,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gate_clk",
|
||||
clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk",
|
||||
"i2s_ref_pad_clk", 0, SPEAR1310_I2S_CLK_CFG,
|
||||
&i2s_sclk_masks, i2s_sclk_rtbl,
|
||||
ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
|
||||
clk_register_clkdev(clk1, "i2s_sclk_gate_clk", NULL);
|
||||
clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
|
||||
@@ -747,13 +745,13 @@ void __init spear1310_clk_init(void)
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "sysram1_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("adc_synth_clk", "adc_synth_gate_clk", "ahb_clk",
|
||||
clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
|
||||
0, SPEAR1310_ADC_CLK_SYNT, NULL, adc_rtbl,
|
||||
ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "adc_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "adc_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "adc_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "adc_clk", "adc_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk", 0,
|
||||
SPEAR1310_PERIP1_CLK_ENB, SPEAR1310_ADC_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "adc_clk");
|
||||
@@ -790,37 +788,37 @@ void __init spear1310_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "e0300000.kbd");
|
||||
|
||||
/* RAS clks */
|
||||
clk = clk_register_mux(NULL, "gen_synth0_1_mux_clk",
|
||||
gen_synth0_1_parents, ARRAY_SIZE(gen_synth0_1_parents),
|
||||
0, SPEAR1310_PLL_CFG, SPEAR1310_RAS_SYNT0_1_CLK_SHIFT,
|
||||
clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
|
||||
ARRAY_SIZE(gen_synth0_1_parents), 0, SPEAR1310_PLL_CFG,
|
||||
SPEAR1310_RAS_SYNT0_1_CLK_SHIFT,
|
||||
SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gen_synth0_1_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn0_1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gen_synth2_3_mux_clk",
|
||||
gen_synth2_3_parents, ARRAY_SIZE(gen_synth2_3_parents),
|
||||
0, SPEAR1310_PLL_CFG, SPEAR1310_RAS_SYNT2_3_CLK_SHIFT,
|
||||
clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
|
||||
ARRAY_SIZE(gen_synth2_3_parents), 0, SPEAR1310_PLL_CFG,
|
||||
SPEAR1310_RAS_SYNT2_3_CLK_SHIFT,
|
||||
SPEAR1310_RAS_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gen_synth2_3_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn2_3_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth0_clk", "gen_synth0_1_clk", 0,
|
||||
clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0,
|
||||
SPEAR1310_RAS_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth0_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn0_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth1_clk", "gen_synth0_1_clk", 0,
|
||||
clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0,
|
||||
SPEAR1310_RAS_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth1_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn1_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth2_clk", "gen_synth2_3_clk", 0,
|
||||
clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0,
|
||||
SPEAR1310_RAS_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth2_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn2_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth3_clk", "gen_synth2_3_clk", 0,
|
||||
clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0,
|
||||
SPEAR1310_RAS_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth3_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn3_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_osc_24m_clk", "osc_24m_clk", 0,
|
||||
SPEAR1310_RAS_CLK_ENB, SPEAR1310_OSC_24M_CLK_ENB, 0,
|
||||
@@ -847,7 +845,7 @@ void __init spear1310_clk_init(void)
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "ras_pll3_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_125m_pad_clk", 0,
|
||||
clk = clk_register_gate(NULL, "ras_tx125_clk", "gmii_pad_clk", 0,
|
||||
SPEAR1310_RAS_CLK_ENB, SPEAR1310_C125M_PAD_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "ras_tx125_clk", NULL);
|
||||
@@ -912,7 +910,7 @@ void __init spear1310_clk_init(void)
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5c700000.eth");
|
||||
|
||||
clk = clk_register_mux(NULL, "smii_rgmii_phy_mux_clk",
|
||||
clk = clk_register_mux(NULL, "smii_rgmii_phy_mclk",
|
||||
smii_rgmii_phy_parents,
|
||||
ARRAY_SIZE(smii_rgmii_phy_parents), 0,
|
||||
SPEAR1310_RAS_CTRL_REG1,
|
||||
@@ -922,184 +920,184 @@ void __init spear1310_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "stmmacphy.2");
|
||||
clk_register_clkdev(clk, NULL, "stmmacphy.4");
|
||||
|
||||
clk = clk_register_mux(NULL, "rmii_phy_mux_clk", rmii_phy_parents,
|
||||
clk = clk_register_mux(NULL, "rmii_phy_mclk", rmii_phy_parents,
|
||||
ARRAY_SIZE(rmii_phy_parents), 0,
|
||||
SPEAR1310_RAS_CTRL_REG1, SPEAR1310_RMII_PHY_CLK_SHIFT,
|
||||
SPEAR1310_PHY_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "stmmacphy.3");
|
||||
|
||||
clk = clk_register_mux(NULL, "uart1_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart1_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_UART1_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "uart1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart1_clk", "uart1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5c800000.serial");
|
||||
|
||||
clk = clk_register_mux(NULL, "uart2_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart2_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_UART2_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "uart2_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart2_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart2_clk", "uart2_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart2_clk", "uart2_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5c900000.serial");
|
||||
|
||||
clk = clk_register_mux(NULL, "uart3_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart3_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_UART3_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "uart3_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart3_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart3_clk", "uart3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart3_clk", "uart3_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5ca00000.serial");
|
||||
|
||||
clk = clk_register_mux(NULL, "uart4_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart4_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_UART4_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "uart4_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart4_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart4_clk", "uart4_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart4_clk", "uart4_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART4_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5cb00000.serial");
|
||||
|
||||
clk = clk_register_mux(NULL, "uart5_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart5_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_UART5_CLK_SHIFT, SPEAR1310_RAS_UART_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "uart5_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart5_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart5_clk", "uart5_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart5_clk", "uart5_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_UART5_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5cc00000.serial");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c1_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c1_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C1_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c1_clk", "i2c1_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5cd00000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c2_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c2_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C2_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c2_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c2_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c2_clk", "i2c2_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5ce00000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c3_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c3_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C3_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c3_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c3_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c3_clk", "i2c3_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5cf00000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c4_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c4_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C4_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c4_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c4_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c4_clk", "i2c4_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C4_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5d000000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c5_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c5_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C5_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c5_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c5_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c5_clk", "i2c5_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C5_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5d100000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c6_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c6_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C6_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c6_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c6_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c6_clk", "i2c6_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C6_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5d200000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "i2c7_mux_clk", i2c_parents,
|
||||
clk = clk_register_mux(NULL, "i2c7_mclk", i2c_parents,
|
||||
ARRAY_SIZE(i2c_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_I2C7_CLK_SHIFT, SPEAR1310_I2C_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2c7_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "i2c7_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2c7_clk", "i2c7_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_I2C7_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5d300000.i2c");
|
||||
|
||||
clk = clk_register_mux(NULL, "ssp1_mux_clk", ssp1_parents,
|
||||
clk = clk_register_mux(NULL, "ssp1_mclk", ssp1_parents,
|
||||
ARRAY_SIZE(ssp1_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_SSP1_CLK_SHIFT, SPEAR1310_SSP1_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "ssp1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "ssp1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "ssp1_clk", "ssp1_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_SSP1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "5d400000.spi");
|
||||
|
||||
clk = clk_register_mux(NULL, "pci_mux_clk", pci_parents,
|
||||
clk = clk_register_mux(NULL, "pci_mclk", pci_parents,
|
||||
ARRAY_SIZE(pci_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_PCI_CLK_SHIFT, SPEAR1310_PCI_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "pci_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "pci_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "pci_clk", "pci_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "pci_clk", "pci_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_PCI_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "pci");
|
||||
|
||||
clk = clk_register_mux(NULL, "tdm1_mux_clk", tdm_parents,
|
||||
clk = clk_register_mux(NULL, "tdm1_mclk", tdm_parents,
|
||||
ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_TDM1_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "tdm1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "tdm1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "tdm1_clk", "tdm1_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "tdm_hdlc.0");
|
||||
|
||||
clk = clk_register_mux(NULL, "tdm2_mux_clk", tdm_parents,
|
||||
clk = clk_register_mux(NULL, "tdm2_mclk", tdm_parents,
|
||||
ARRAY_SIZE(tdm_parents), 0, SPEAR1310_RAS_CTRL_REG0,
|
||||
SPEAR1310_TDM2_CLK_SHIFT, SPEAR1310_TDM_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "tdm2_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "tdm2_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "tdm2_clk", "tdm2_mclk", 0,
|
||||
SPEAR1310_RAS_SW_CLK_CTRL, SPEAR1310_TDM2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "tdm_hdlc.1");
|
||||
|
||||
@@ -369,27 +369,25 @@ static struct frac_rate_tbl gen_rtbl[] = {
|
||||
|
||||
/* clock parents */
|
||||
static const char *vco_parents[] = { "osc_24m_clk", "osc_25m_clk", };
|
||||
static const char *sys_parents[] = { "none", "pll1_clk", "none", "none",
|
||||
"sys_synth_clk", "none", "pll2_clk", "pll3_clk", };
|
||||
static const char *ahb_parents[] = { "cpu_div3_clk", "amba_synth_clk", };
|
||||
static const char *sys_parents[] = { "pll1_clk", "pll1_clk", "pll1_clk",
|
||||
"pll1_clk", "sys_synth_clk", "sys_synth_clk", "pll2_clk", "pll3_clk", };
|
||||
static const char *ahb_parents[] = { "cpu_div3_clk", "amba_syn_clk", };
|
||||
static const char *gpt_parents[] = { "osc_24m_clk", "apb_clk", };
|
||||
static const char *uart0_parents[] = { "pll5_clk", "osc_24m_clk",
|
||||
"uart0_synth_gate_clk", };
|
||||
"uart0_syn_gclk", };
|
||||
static const char *uart1_parents[] = { "pll5_clk", "osc_24m_clk",
|
||||
"uart1_synth_gate_clk", };
|
||||
static const char *c3_parents[] = { "pll5_clk", "c3_synth_gate_clk", };
|
||||
static const char *gmac_phy_input_parents[] = { "gmii_125m_pad_clk", "pll2_clk",
|
||||
"uart1_syn_gclk", };
|
||||
static const char *c3_parents[] = { "pll5_clk", "c3_syn_gclk", };
|
||||
static const char *gmac_phy_input_parents[] = { "gmii_pad_clk", "pll2_clk",
|
||||
"osc_25m_clk", };
|
||||
static const char *gmac_phy_parents[] = { "gmac_phy_input_mux_clk",
|
||||
"gmac_phy_synth_gate_clk", };
|
||||
static const char *gmac_phy_parents[] = { "phy_input_mclk", "phy_syn_gclk", };
|
||||
static const char *clcd_synth_parents[] = { "vco1div4_clk", "pll2_clk", };
|
||||
static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_synth_clk", };
|
||||
static const char *clcd_pixel_parents[] = { "pll5_clk", "clcd_syn_clk", };
|
||||
static const char *i2s_src_parents[] = { "vco1div2_clk", "pll2_clk", "pll3_clk",
|
||||
"i2s_src_pad_clk", };
|
||||
static const char *i2s_ref_parents[] = { "i2s_src_mux_clk", "i2s_prs1_clk", };
|
||||
static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_synth2_clk",
|
||||
};
|
||||
static const char *spdif_in_parents[] = { "pll2_clk", "gen_synth3_clk", };
|
||||
static const char *i2s_ref_parents[] = { "i2s_src_mclk", "i2s_prs1_clk", };
|
||||
static const char *spdif_out_parents[] = { "i2s_src_pad_clk", "gen_syn2_clk", };
|
||||
static const char *spdif_in_parents[] = { "pll2_clk", "gen_syn3_clk", };
|
||||
|
||||
static const char *gen_synth0_1_parents[] = { "vco1div4_clk", "vco3div2_clk",
|
||||
"pll3_clk", };
|
||||
@@ -415,9 +413,9 @@ void __init spear1340_clk_init(void)
|
||||
25000000);
|
||||
clk_register_clkdev(clk, "osc_25m_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_rate(NULL, "gmii_125m_pad_clk", NULL,
|
||||
CLK_IS_ROOT, 125000000);
|
||||
clk_register_clkdev(clk, "gmii_125m_pad_clk", NULL);
|
||||
clk = clk_register_fixed_rate(NULL, "gmii_pad_clk", NULL, CLK_IS_ROOT,
|
||||
125000000);
|
||||
clk_register_clkdev(clk, "gmii_pad_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_rate(NULL, "i2s_src_pad_clk", NULL,
|
||||
CLK_IS_ROOT, 12288000);
|
||||
@@ -431,35 +429,35 @@ void __init spear1340_clk_init(void)
|
||||
|
||||
/* clock derived from 24 or 25 MHz osc clk */
|
||||
/* vco-pll */
|
||||
clk = clk_register_mux(NULL, "vco1_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco1_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
|
||||
SPEAR1340_PLL1_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco1_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mux_clk",
|
||||
0, SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
|
||||
clk_register_clkdev(clk, "vco1_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "vco1_mclk", 0,
|
||||
SPEAR1340_PLL1_CTR, SPEAR1340_PLL1_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco1_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "vco2_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco2_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
|
||||
SPEAR1340_PLL2_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco2_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mux_clk",
|
||||
0, SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
|
||||
clk_register_clkdev(clk, "vco2_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "vco2_mclk", 0,
|
||||
SPEAR1340_PLL2_CTR, SPEAR1340_PLL2_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco2_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll2_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "vco3_mux_clk", vco_parents,
|
||||
clk = clk_register_mux(NULL, "vco3_mclk", vco_parents,
|
||||
ARRAY_SIZE(vco_parents), 0, SPEAR1340_PLL_CFG,
|
||||
SPEAR1340_PLL3_CLK_SHIFT, SPEAR1340_PLL_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "vco3_mux_clk", NULL);
|
||||
clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mux_clk",
|
||||
0, SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
|
||||
clk_register_clkdev(clk, "vco3_mclk", NULL);
|
||||
clk = clk_register_vco_pll("vco3_clk", "pll3_clk", NULL, "vco3_mclk", 0,
|
||||
SPEAR1340_PLL3_CTR, SPEAR1340_PLL3_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco3_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll3_clk", NULL);
|
||||
@@ -498,7 +496,7 @@ void __init spear1340_clk_init(void)
|
||||
/* peripherals */
|
||||
clk_register_fixed_factor(NULL, "thermal_clk", "osc_24m_clk", 0, 1,
|
||||
128);
|
||||
clk = clk_register_gate(NULL, "thermal_gate_clk", "thermal_clk", 0,
|
||||
clk = clk_register_gate(NULL, "thermal_gclk", "thermal_clk", 0,
|
||||
SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_THSENS_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_thermal");
|
||||
@@ -509,23 +507,23 @@ void __init spear1340_clk_init(void)
|
||||
clk_register_clkdev(clk, "ddr_clk", NULL);
|
||||
|
||||
/* clock derived from pll1 clk */
|
||||
clk = clk_register_frac("sys_synth_clk", "vco1div2_clk", 0,
|
||||
clk = clk_register_frac("sys_syn_clk", "vco1div2_clk", 0,
|
||||
SPEAR1340_SYS_CLK_SYNT, sys_synth_rtbl,
|
||||
ARRAY_SIZE(sys_synth_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "sys_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "sys_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("amba_synth_clk", "vco1div2_clk", 0,
|
||||
clk = clk_register_frac("amba_syn_clk", "vco1div2_clk", 0,
|
||||
SPEAR1340_AMBA_CLK_SYNT, amba_synth_rtbl,
|
||||
ARRAY_SIZE(amba_synth_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "amba_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "amba_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "sys_mux_clk", sys_parents,
|
||||
clk = clk_register_mux(NULL, "sys_mclk", sys_parents,
|
||||
ARRAY_SIZE(sys_parents), 0, SPEAR1340_SYS_CLK_CTRL,
|
||||
SPEAR1340_SCLK_SRC_SEL_SHIFT,
|
||||
SPEAR1340_SCLK_SRC_SEL_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "sys_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mux_clk", 0, 1,
|
||||
clk = clk_register_fixed_factor(NULL, "cpu_clk", "sys_mclk", 0, 1,
|
||||
2);
|
||||
clk_register_clkdev(clk, "cpu_clk", NULL);
|
||||
|
||||
@@ -548,194 +546,193 @@ void __init spear1340_clk_init(void)
|
||||
clk_register_clkdev(clk, "apb_clk", NULL);
|
||||
|
||||
/* gpt clocks */
|
||||
clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt0_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_GPT0_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt0_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt0_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt0_clk", "gpt0_mclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT0_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt0");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt1_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_GPT1_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt1_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt1_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_GPT1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt1");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt2_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_GPT2_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt2_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt2_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
|
||||
SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt2");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt_parents,
|
||||
clk = clk_register_mux(NULL, "gpt3_mclk", gpt_parents,
|
||||
ARRAY_SIZE(gpt_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_GPT3_CLK_SHIFT, SPEAR1340_GPT_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gpt3_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt3_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
|
||||
SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_GPT3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt3");
|
||||
|
||||
/* others */
|
||||
clk = clk_register_aux("uart0_synth_clk", "uart0_synth_gate_clk",
|
||||
clk = clk_register_aux("uart0_syn_clk", "uart0_syn_gclk",
|
||||
"vco1div2_clk", 0, SPEAR1340_UART0_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart0_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart0_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart0_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart0_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents,
|
||||
clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
|
||||
ARRAY_SIZE(uart0_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_UART0_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "uart0_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart0_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart0_clk", "uart0_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "uart0_clk", "uart0_mclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UART0_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "e0000000.serial");
|
||||
|
||||
clk = clk_register_aux("uart1_synth_clk", "uart1_synth_gate_clk",
|
||||
clk = clk_register_aux("uart1_syn_clk", "uart1_syn_gclk",
|
||||
"vco1div2_clk", 0, SPEAR1340_UART1_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart1_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart1_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart1_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart1_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "uart1_mux_clk", uart1_parents,
|
||||
clk = clk_register_mux(NULL, "uart1_mclk", uart1_parents,
|
||||
ARRAY_SIZE(uart1_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_UART1_CLK_SHIFT, SPEAR1340_UART_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "uart1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart1_clk", "uart1_mux_clk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
|
||||
clk = clk_register_gate(NULL, "uart1_clk", "uart1_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_UART1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b4100000.serial");
|
||||
|
||||
clk = clk_register_aux("sdhci_synth_clk", "sdhci_synth_gate_clk",
|
||||
clk = clk_register_aux("sdhci_syn_clk", "sdhci_syn_gclk",
|
||||
"vco1div2_clk", 0, SPEAR1340_SDHCI_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "sdhci_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "sdhci_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "sdhci_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "sdhci_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "sdhci_clk", "sdhci_syn_gclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_SDHCI_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b3000000.sdhci");
|
||||
|
||||
clk = clk_register_aux("cfxd_synth_clk", "cfxd_synth_gate_clk",
|
||||
"vco1div2_clk", 0, SPEAR1340_CFXD_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "cfxd_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "cfxd_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("cfxd_syn_clk", "cfxd_syn_gclk", "vco1div2_clk",
|
||||
0, SPEAR1340_CFXD_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "cfxd_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "cfxd_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cfxd_clk", "cfxd_syn_gclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CFXD_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b2800000.cf");
|
||||
clk_register_clkdev(clk, NULL, "arasan_xd");
|
||||
|
||||
clk = clk_register_aux("c3_synth_clk", "c3_synth_gate_clk",
|
||||
"vco1div2_clk", 0, SPEAR1340_C3_CLK_SYNT, NULL,
|
||||
aux_rtbl, ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "c3_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "c3_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("c3_syn_clk", "c3_syn_gclk", "vco1div2_clk", 0,
|
||||
SPEAR1340_C3_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "c3_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "c3_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "c3_mux_clk", c3_parents,
|
||||
clk = clk_register_mux(NULL, "c3_mclk", c3_parents,
|
||||
ARRAY_SIZE(c3_parents), 0, SPEAR1340_PERIP_CLK_CFG,
|
||||
SPEAR1340_C3_CLK_SHIFT, SPEAR1340_C3_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "c3_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "c3_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "c3_clk", "c3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "c3_clk", "c3_mclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_C3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "c3");
|
||||
|
||||
/* gmac */
|
||||
clk = clk_register_mux(NULL, "gmac_phy_input_mux_clk",
|
||||
gmac_phy_input_parents,
|
||||
clk = clk_register_mux(NULL, "phy_input_mclk", gmac_phy_input_parents,
|
||||
ARRAY_SIZE(gmac_phy_input_parents), 0,
|
||||
SPEAR1340_GMAC_CLK_CFG,
|
||||
SPEAR1340_GMAC_PHY_INPUT_CLK_SHIFT,
|
||||
SPEAR1340_GMAC_PHY_INPUT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gmac_phy_input_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "phy_input_mclk", NULL);
|
||||
|
||||
clk = clk_register_aux("gmac_phy_synth_clk", "gmac_phy_synth_gate_clk",
|
||||
"gmac_phy_input_mux_clk", 0, SPEAR1340_GMAC_CLK_SYNT,
|
||||
NULL, gmac_rtbl, ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gmac_phy_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gmac_phy_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("phy_syn_clk", "phy_syn_gclk", "phy_input_mclk",
|
||||
0, SPEAR1340_GMAC_CLK_SYNT, NULL, gmac_rtbl,
|
||||
ARRAY_SIZE(gmac_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "phy_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "phy_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gmac_phy_mux_clk", gmac_phy_parents,
|
||||
clk = clk_register_mux(NULL, "phy_mclk", gmac_phy_parents,
|
||||
ARRAY_SIZE(gmac_phy_parents), 0,
|
||||
SPEAR1340_PERIP_CLK_CFG, SPEAR1340_GMAC_PHY_CLK_SHIFT,
|
||||
SPEAR1340_GMAC_PHY_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "stmmacphy.0");
|
||||
|
||||
/* clcd */
|
||||
clk = clk_register_mux(NULL, "clcd_synth_mux_clk", clcd_synth_parents,
|
||||
clk = clk_register_mux(NULL, "clcd_syn_mclk", clcd_synth_parents,
|
||||
ARRAY_SIZE(clcd_synth_parents), 0,
|
||||
SPEAR1340_CLCD_CLK_SYNT, SPEAR1340_CLCD_SYNT_CLK_SHIFT,
|
||||
SPEAR1340_CLCD_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "clcd_synth_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "clcd_syn_mclk", NULL);
|
||||
|
||||
clk = clk_register_frac("clcd_synth_clk", "clcd_synth_mux_clk", 0,
|
||||
clk = clk_register_frac("clcd_syn_clk", "clcd_syn_mclk", 0,
|
||||
SPEAR1340_CLCD_CLK_SYNT, clcd_rtbl,
|
||||
ARRAY_SIZE(clcd_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "clcd_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "clcd_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "clcd_pixel_mux_clk", clcd_pixel_parents,
|
||||
clk = clk_register_mux(NULL, "clcd_pixel_mclk", clcd_pixel_parents,
|
||||
ARRAY_SIZE(clcd_pixel_parents), 0,
|
||||
SPEAR1340_PERIP_CLK_CFG, SPEAR1340_CLCD_CLK_SHIFT,
|
||||
SPEAR1340_CLCD_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "clcd_pixel_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_pixel_mclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_CLCD_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "clcd_clk", NULL);
|
||||
|
||||
/* i2s */
|
||||
clk = clk_register_mux(NULL, "i2s_src_mux_clk", i2s_src_parents,
|
||||
clk = clk_register_mux(NULL, "i2s_src_mclk", i2s_src_parents,
|
||||
ARRAY_SIZE(i2s_src_parents), 0, SPEAR1340_I2S_CLK_CFG,
|
||||
SPEAR1340_I2S_SRC_CLK_SHIFT, SPEAR1340_I2S_SRC_CLK_MASK,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "i2s_src_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mux_clk", 0,
|
||||
clk = clk_register_aux("i2s_prs1_clk", NULL, "i2s_src_mclk", 0,
|
||||
SPEAR1340_I2S_CLK_CFG, &i2s_prs1_masks, i2s_prs1_rtbl,
|
||||
ARRAY_SIZE(i2s_prs1_rtbl), &_lock, NULL);
|
||||
clk_register_clkdev(clk, "i2s_prs1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "i2s_ref_mux_clk", i2s_ref_parents,
|
||||
clk = clk_register_mux(NULL, "i2s_ref_mclk", i2s_ref_parents,
|
||||
ARRAY_SIZE(i2s_ref_parents), 0, SPEAR1340_I2S_CLK_CFG,
|
||||
SPEAR1340_I2S_REF_SHIFT, SPEAR1340_I2S_REF_SEL_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "i2s_ref_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "i2s_ref_pad_clk", "i2s_ref_mclk", 0,
|
||||
SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_I2S_REF_PAD_CLK_ENB,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, "i2s_ref_pad_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gate_clk",
|
||||
"i2s_ref_mux_clk", 0, SPEAR1340_I2S_CLK_CFG,
|
||||
&i2s_sclk_masks, i2s_sclk_rtbl,
|
||||
ARRAY_SIZE(i2s_sclk_rtbl), &_lock, &clk1);
|
||||
clk = clk_register_aux("i2s_sclk_clk", "i2s_sclk_gclk", "i2s_ref_mclk",
|
||||
0, SPEAR1340_I2S_CLK_CFG, &i2s_sclk_masks,
|
||||
i2s_sclk_rtbl, ARRAY_SIZE(i2s_sclk_rtbl), &_lock,
|
||||
&clk1);
|
||||
clk_register_clkdev(clk, "i2s_sclk_clk", NULL);
|
||||
clk_register_clkdev(clk1, "i2s_sclk_gate_clk", NULL);
|
||||
clk_register_clkdev(clk1, "i2s_sclk_gclk", NULL);
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
clk = clk_register_gate(NULL, "i2c0_clk", "ahb_clk", 0,
|
||||
@@ -744,7 +741,7 @@ void __init spear1340_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "e0280000.i2c");
|
||||
|
||||
clk = clk_register_gate(NULL, "i2c1_clk", "ahb_clk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_I2C1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "b4000000.i2c");
|
||||
|
||||
@@ -800,13 +797,13 @@ void __init spear1340_clk_init(void)
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "sysram1_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("adc_synth_clk", "adc_synth_gate_clk", "ahb_clk",
|
||||
clk = clk_register_aux("adc_syn_clk", "adc_syn_gclk", "ahb_clk",
|
||||
0, SPEAR1340_ADC_CLK_SYNT, NULL, adc_rtbl,
|
||||
ARRAY_SIZE(adc_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "adc_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "adc_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "adc_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "adc_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "adc_clk", "adc_synth_gate_clk", 0,
|
||||
clk = clk_register_gate(NULL, "adc_clk", "adc_syn_gclk", 0,
|
||||
SPEAR1340_PERIP1_CLK_ENB, SPEAR1340_ADC_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "adc_clk");
|
||||
@@ -843,39 +840,39 @@ void __init spear1340_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "e0300000.kbd");
|
||||
|
||||
/* RAS clks */
|
||||
clk = clk_register_mux(NULL, "gen_synth0_1_mux_clk",
|
||||
gen_synth0_1_parents, ARRAY_SIZE(gen_synth0_1_parents),
|
||||
0, SPEAR1340_PLL_CFG, SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
|
||||
clk = clk_register_mux(NULL, "gen_syn0_1_mclk", gen_synth0_1_parents,
|
||||
ARRAY_SIZE(gen_synth0_1_parents), 0, SPEAR1340_PLL_CFG,
|
||||
SPEAR1340_GEN_SYNT0_1_CLK_SHIFT,
|
||||
SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gen_synth0_1_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn0_1_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gen_synth2_3_mux_clk",
|
||||
gen_synth2_3_parents, ARRAY_SIZE(gen_synth2_3_parents),
|
||||
0, SPEAR1340_PLL_CFG, SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
|
||||
clk = clk_register_mux(NULL, "gen_syn2_3_mclk", gen_synth2_3_parents,
|
||||
ARRAY_SIZE(gen_synth2_3_parents), 0, SPEAR1340_PLL_CFG,
|
||||
SPEAR1340_GEN_SYNT2_3_CLK_SHIFT,
|
||||
SPEAR1340_GEN_SYNT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gen_synth2_3_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn2_3_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth0_clk", "gen_synth0_1_clk", 0,
|
||||
clk = clk_register_frac("gen_syn0_clk", "gen_syn0_1_clk", 0,
|
||||
SPEAR1340_GEN_CLK_SYNT0, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth0_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn0_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth1_clk", "gen_synth0_1_clk", 0,
|
||||
clk = clk_register_frac("gen_syn1_clk", "gen_syn0_1_clk", 0,
|
||||
SPEAR1340_GEN_CLK_SYNT1, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth1_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn1_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth2_clk", "gen_synth2_3_clk", 0,
|
||||
clk = clk_register_frac("gen_syn2_clk", "gen_syn2_3_clk", 0,
|
||||
SPEAR1340_GEN_CLK_SYNT2, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth2_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn2_clk", NULL);
|
||||
|
||||
clk = clk_register_frac("gen_synth3_clk", "gen_synth2_3_clk", 0,
|
||||
clk = clk_register_frac("gen_syn3_clk", "gen_syn2_3_clk", 0,
|
||||
SPEAR1340_GEN_CLK_SYNT3, gen_rtbl, ARRAY_SIZE(gen_rtbl),
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen_synth3_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen_syn3_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "mali_clk", "gen_synth3_clk", 0,
|
||||
clk = clk_register_gate(NULL, "mali_clk", "gen_syn3_clk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_MALI_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "mali");
|
||||
@@ -890,74 +887,74 @@ void __init spear1340_clk_init(void)
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_cec.1");
|
||||
|
||||
clk = clk_register_mux(NULL, "spdif_out_mux_clk", spdif_out_parents,
|
||||
clk = clk_register_mux(NULL, "spdif_out_mclk", spdif_out_parents,
|
||||
ARRAY_SIZE(spdif_out_parents), 0,
|
||||
SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_OUT_CLK_SHIFT,
|
||||
SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "spdif_out_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "spdif_out_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "spdif_out_clk", "spdif_out_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_OUT_CLK_ENB,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "spdif-out");
|
||||
|
||||
clk = clk_register_mux(NULL, "spdif_in_mux_clk", spdif_in_parents,
|
||||
clk = clk_register_mux(NULL, "spdif_in_mclk", spdif_in_parents,
|
||||
ARRAY_SIZE(spdif_in_parents), 0,
|
||||
SPEAR1340_PERIP_CLK_CFG, SPEAR1340_SPDIF_IN_CLK_SHIFT,
|
||||
SPEAR1340_SPDIF_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "spdif_in_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "spdif_in_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "spdif_in_clk", "spdif_in_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_SPDIF_IN_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spdif-in");
|
||||
|
||||
clk = clk_register_gate(NULL, "acp_clk", "acp_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "acp_clk", "acp_mclk", 0,
|
||||
SPEAR1340_PERIP2_CLK_ENB, SPEAR1340_ACP_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "acp_clk");
|
||||
|
||||
clk = clk_register_gate(NULL, "plgpio_clk", "plgpio_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "plgpio_clk", "plgpio_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PLGPIO_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "plgpio");
|
||||
|
||||
clk = clk_register_gate(NULL, "video_dec_clk", "video_dec_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "video_dec_clk", "video_dec_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_DEC_CLK_ENB,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "video_dec");
|
||||
|
||||
clk = clk_register_gate(NULL, "video_enc_clk", "video_enc_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "video_enc_clk", "video_enc_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_ENC_CLK_ENB,
|
||||
0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "video_enc");
|
||||
|
||||
clk = clk_register_gate(NULL, "video_in_clk", "video_in_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "video_in_clk", "video_in_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_VIDEO_IN_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_vip");
|
||||
|
||||
clk = clk_register_gate(NULL, "cam0_clk", "cam0_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cam0_clk", "cam0_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM0_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_camif.0");
|
||||
|
||||
clk = clk_register_gate(NULL, "cam1_clk", "cam1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cam1_clk", "cam1_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM1_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_camif.1");
|
||||
|
||||
clk = clk_register_gate(NULL, "cam2_clk", "cam2_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cam2_clk", "cam2_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM2_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_camif.2");
|
||||
|
||||
clk = clk_register_gate(NULL, "cam3_clk", "cam3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "cam3_clk", "cam3_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_CAM3_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "spear_camif.3");
|
||||
|
||||
clk = clk_register_gate(NULL, "pwm_clk", "pwm_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "pwm_clk", "pwm_mclk", 0,
|
||||
SPEAR1340_PERIP3_CLK_ENB, SPEAR1340_PWM_CLK_ENB, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, NULL, "pwm");
|
||||
|
||||
@@ -122,12 +122,12 @@ static struct gpt_rate_tbl gpt_rtbl[] = {
|
||||
};
|
||||
|
||||
/* clock parents */
|
||||
static const char *uart0_parents[] = { "pll3_48m_clk", "uart_synth_gate_clk", };
|
||||
static const char *firda_parents[] = { "pll3_48m_clk", "firda_synth_gate_clk",
|
||||
static const char *uart0_parents[] = { "pll3_clk", "uart_syn_gclk", };
|
||||
static const char *firda_parents[] = { "pll3_clk", "firda_syn_gclk",
|
||||
};
|
||||
static const char *gpt0_parents[] = { "pll3_48m_clk", "gpt0_synth_clk", };
|
||||
static const char *gpt1_parents[] = { "pll3_48m_clk", "gpt1_synth_clk", };
|
||||
static const char *gpt2_parents[] = { "pll3_48m_clk", "gpt2_synth_clk", };
|
||||
static const char *gpt0_parents[] = { "pll3_clk", "gpt0_syn_clk", };
|
||||
static const char *gpt1_parents[] = { "pll3_clk", "gpt1_syn_clk", };
|
||||
static const char *gpt2_parents[] = { "pll3_clk", "gpt2_syn_clk", };
|
||||
static const char *gen2_3_parents[] = { "pll1_clk", "pll2_clk", };
|
||||
static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none",
|
||||
"pll2_clk", };
|
||||
@@ -137,7 +137,7 @@ static void __init spear300_clk_init(void)
|
||||
{
|
||||
struct clk *clk;
|
||||
|
||||
clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_48m_clk", 0,
|
||||
clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_clk", 0,
|
||||
1, 1);
|
||||
clk_register_clkdev(clk, NULL, "60000000.clcd");
|
||||
|
||||
@@ -219,15 +219,11 @@ static void __init spear310_clk_init(void)
|
||||
#define SPEAR320_UARTX_PCLK_VAL_SYNTH1 0x0
|
||||
#define SPEAR320_UARTX_PCLK_VAL_APB 0x1
|
||||
|
||||
static const char *i2s_ref_parents[] = { "ras_pll2_clk",
|
||||
"ras_gen2_synth_gate_clk", };
|
||||
static const char *sdhci_parents[] = { "ras_pll3_48m_clk",
|
||||
"ras_gen3_synth_gate_clk",
|
||||
};
|
||||
static const char *i2s_ref_parents[] = { "ras_pll2_clk", "ras_syn2_gclk", };
|
||||
static const char *sdhci_parents[] = { "ras_pll3_clk", "ras_syn3_gclk", };
|
||||
static const char *smii0_parents[] = { "smii_125m_pad", "ras_pll2_clk",
|
||||
"ras_gen0_synth_gate_clk", };
|
||||
static const char *uartx_parents[] = { "ras_gen1_synth_gate_clk", "ras_apb_clk",
|
||||
};
|
||||
"ras_syn0_gclk", };
|
||||
static const char *uartx_parents[] = { "ras_syn1_gclk", "ras_apb_clk", };
|
||||
|
||||
static void __init spear320_clk_init(void)
|
||||
{
|
||||
@@ -237,7 +233,7 @@ static void __init spear320_clk_init(void)
|
||||
CLK_IS_ROOT, 125000000);
|
||||
clk_register_clkdev(clk, "smii_125m_pad", NULL);
|
||||
|
||||
clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_48m_clk", 0,
|
||||
clk = clk_register_fixed_factor(NULL, "clcd_clk", "ras_pll3_clk", 0,
|
||||
1, 1);
|
||||
clk_register_clkdev(clk, NULL, "90000000.clcd");
|
||||
|
||||
@@ -363,9 +359,9 @@ void __init spear3xx_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "fc900000.rtc");
|
||||
|
||||
/* clock derived from 24 MHz osc clk */
|
||||
clk = clk_register_fixed_rate(NULL, "pll3_48m_clk", "osc_24m_clk", 0,
|
||||
clk = clk_register_fixed_rate(NULL, "pll3_clk", "osc_24m_clk", 0,
|
||||
48000000);
|
||||
clk_register_clkdev(clk, "pll3_48m_clk", NULL);
|
||||
clk_register_clkdev(clk, "pll3_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_factor(NULL, "wdt_clk", "osc_24m_clk", 0, 1,
|
||||
1);
|
||||
@@ -392,98 +388,98 @@ void __init spear3xx_clk_init(void)
|
||||
HCLK_RATIO_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ahb_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk",
|
||||
"pll1_clk", 0, UART_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "pll1_clk", 0,
|
||||
UART_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "uart0_mux_clk", uart0_parents,
|
||||
clk = clk_register_mux(NULL, "uart0_mclk", uart0_parents,
|
||||
ARRAY_SIZE(uart0_parents), 0, PERIP_CLK_CFG,
|
||||
UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "uart0_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart0_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart0", "uart0_mux_clk", 0,
|
||||
PERIP1_CLK_ENB, UART_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "uart0", "uart0_mclk", 0, PERIP1_CLK_ENB,
|
||||
UART_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "d0000000.serial");
|
||||
|
||||
clk = clk_register_aux("firda_synth_clk", "firda_synth_gate_clk",
|
||||
"pll1_clk", 0, FIRDA_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "firda_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "firda_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("firda_syn_clk", "firda_syn_gclk", "pll1_clk", 0,
|
||||
FIRDA_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "firda_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "firda_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "firda_mux_clk", firda_parents,
|
||||
clk = clk_register_mux(NULL, "firda_mclk", firda_parents,
|
||||
ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG,
|
||||
FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "firda_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "firda_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "firda_clk", "firda_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "firda_clk", "firda_mclk", 0,
|
||||
PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "firda");
|
||||
|
||||
/* gpt clocks */
|
||||
clk_register_gpt("gpt0_synth_clk", "pll1_clk", 0, PRSC0_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk_register_gpt("gpt0_syn_clk", "pll1_clk", 0, PRSC0_CLK_CFG, gpt_rtbl,
|
||||
ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk = clk_register_mux(NULL, "gpt0_clk", gpt0_parents,
|
||||
ARRAY_SIZE(gpt0_parents), 0, PERIP_CLK_CFG,
|
||||
GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt0");
|
||||
|
||||
clk_register_gpt("gpt1_synth_clk", "pll1_clk", 0, PRSC1_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt1_parents,
|
||||
clk_register_gpt("gpt1_syn_clk", "pll1_clk", 0, PRSC1_CLK_CFG, gpt_rtbl,
|
||||
ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk = clk_register_mux(NULL, "gpt1_mclk", gpt1_parents,
|
||||
ARRAY_SIZE(gpt1_parents), 0, PERIP_CLK_CFG,
|
||||
GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gpt1_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt1_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
|
||||
PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt1");
|
||||
|
||||
clk_register_gpt("gpt2_synth_clk", "pll1_clk", 0, PRSC2_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt2_parents,
|
||||
clk_register_gpt("gpt2_syn_clk", "pll1_clk", 0, PRSC2_CLK_CFG, gpt_rtbl,
|
||||
ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk = clk_register_mux(NULL, "gpt2_mclk", gpt2_parents,
|
||||
ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG,
|
||||
GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gpt2_mux_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0,
|
||||
clk_register_clkdev(clk, "gpt2_mclk", NULL);
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
|
||||
PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt2");
|
||||
|
||||
/* general synths clocks */
|
||||
clk = clk_register_aux("gen0_synth_clk", "gen0_synth_gate_clk",
|
||||
"pll1_clk", 0, GEN0_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen0_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen0_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("gen0_syn_clk", "gen0_syn_gclk", "pll1_clk",
|
||||
0, GEN0_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen0_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen0_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_aux("gen1_synth_clk", "gen1_synth_gate_clk",
|
||||
"pll1_clk", 0, GEN1_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen1_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen1_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("gen1_syn_clk", "gen1_syn_gclk", "pll1_clk",
|
||||
0, GEN1_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen1_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen1_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gen2_3_parent_clk", gen2_3_parents,
|
||||
clk = clk_register_mux(NULL, "gen2_3_par_clk", gen2_3_parents,
|
||||
ARRAY_SIZE(gen2_3_parents), 0, CORE_CLK_CFG,
|
||||
GEN_SYNTH2_3_CLK_SHIFT, GEN_SYNTH2_3_CLK_MASK, 0,
|
||||
&_lock);
|
||||
clk_register_clkdev(clk, "gen2_3_parent_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen2_3_par_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("gen2_synth_clk", "gen2_synth_gate_clk",
|
||||
"gen2_3_parent_clk", 0, GEN2_CLK_SYNT, NULL, aux_rtbl,
|
||||
clk = clk_register_aux("gen2_syn_clk", "gen2_syn_gclk",
|
||||
"gen2_3_par_clk", 0, GEN2_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen2_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen2_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen2_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen2_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_aux("gen3_synth_clk", "gen3_synth_gate_clk",
|
||||
"gen2_3_parent_clk", 0, GEN3_CLK_SYNT, NULL, aux_rtbl,
|
||||
clk = clk_register_aux("gen3_syn_clk", "gen3_syn_gclk",
|
||||
"gen2_3_par_clk", 0, GEN3_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "gen3_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen3_synth_gate_clk", NULL);
|
||||
clk_register_clkdev(clk, "gen3_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "gen3_syn_gclk", NULL);
|
||||
|
||||
/* clock derived from pll3 clk */
|
||||
clk = clk_register_gate(NULL, "usbh_clk", "pll3_48m_clk", 0,
|
||||
PERIP1_CLK_ENB, USBH_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "usbh_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
|
||||
USBH_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "usbh_clk", NULL);
|
||||
|
||||
clk = clk_register_fixed_factor(NULL, "usbh.0_clk", "usbh_clk", 0, 1,
|
||||
@@ -494,8 +490,8 @@ void __init spear3xx_clk_init(void)
|
||||
1);
|
||||
clk_register_clkdev(clk, "usbh.1_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "usbd_clk", "pll3_48m_clk", 0,
|
||||
PERIP1_CLK_ENB, USBD_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "usbd_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
|
||||
USBD_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "designware_udc");
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
@@ -579,29 +575,25 @@ void __init spear3xx_clk_init(void)
|
||||
RAS_CLK_ENB, RAS_PLL2_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_pll2_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_pll3_48m_clk", "pll3_48m_clk", 0,
|
||||
clk = clk_register_gate(NULL, "ras_pll3_clk", "pll3_clk", 0,
|
||||
RAS_CLK_ENB, RAS_48M_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_pll3_48m_clk", NULL);
|
||||
clk_register_clkdev(clk, "ras_pll3_clk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_gen0_synth_gate_clk",
|
||||
"gen0_synth_gate_clk", 0, RAS_CLK_ENB,
|
||||
RAS_SYNT0_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_gen0_synth_gate_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "ras_syn0_gclk", "gen0_syn_gclk", 0,
|
||||
RAS_CLK_ENB, RAS_SYNT0_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_syn0_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_gen1_synth_gate_clk",
|
||||
"gen1_synth_gate_clk", 0, RAS_CLK_ENB,
|
||||
RAS_SYNT1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_gen1_synth_gate_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "ras_syn1_gclk", "gen1_syn_gclk", 0,
|
||||
RAS_CLK_ENB, RAS_SYNT1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_syn1_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_gen2_synth_gate_clk",
|
||||
"gen2_synth_gate_clk", 0, RAS_CLK_ENB,
|
||||
RAS_SYNT2_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_gen2_synth_gate_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "ras_syn2_gclk", "gen2_syn_gclk", 0,
|
||||
RAS_CLK_ENB, RAS_SYNT2_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_syn2_gclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "ras_gen3_synth_gate_clk",
|
||||
"gen3_synth_gate_clk", 0, RAS_CLK_ENB,
|
||||
RAS_SYNT3_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_gen3_synth_gate_clk", NULL);
|
||||
clk = clk_register_gate(NULL, "ras_syn3_gclk", "gen3_syn_gclk", 0,
|
||||
RAS_CLK_ENB, RAS_SYNT3_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ras_syn3_gclk", NULL);
|
||||
|
||||
if (of_machine_is_compatible("st,spear300"))
|
||||
spear300_clk_init();
|
||||
|
||||
@@ -97,13 +97,12 @@ static struct aux_rate_tbl aux_rtbl[] = {
|
||||
{.xscale = 1, .yscale = 2, .eq = 1}, /* 166 MHz */
|
||||
};
|
||||
|
||||
static const char *clcd_parents[] = { "pll3_48m_clk", "clcd_synth_gate_clk", };
|
||||
static const char *firda_parents[] = { "pll3_48m_clk", "firda_synth_gate_clk",
|
||||
};
|
||||
static const char *uart_parents[] = { "pll3_48m_clk", "uart_synth_gate_clk", };
|
||||
static const char *gpt0_1_parents[] = { "pll3_48m_clk", "gpt0_1_synth_clk", };
|
||||
static const char *gpt2_parents[] = { "pll3_48m_clk", "gpt2_synth_clk", };
|
||||
static const char *gpt3_parents[] = { "pll3_48m_clk", "gpt3_synth_clk", };
|
||||
static const char *clcd_parents[] = { "pll3_clk", "clcd_syn_gclk", };
|
||||
static const char *firda_parents[] = { "pll3_clk", "firda_syn_gclk", };
|
||||
static const char *uart_parents[] = { "pll3_clk", "uart_syn_gclk", };
|
||||
static const char *gpt0_1_parents[] = { "pll3_clk", "gpt0_1_syn_clk", };
|
||||
static const char *gpt2_parents[] = { "pll3_clk", "gpt2_syn_clk", };
|
||||
static const char *gpt3_parents[] = { "pll3_clk", "gpt3_syn_clk", };
|
||||
static const char *ddr_parents[] = { "ahb_clk", "ahbmult2_clk", "none",
|
||||
"pll2_clk", };
|
||||
|
||||
@@ -136,9 +135,9 @@ void __init spear6xx_clk_init(void)
|
||||
clk_register_clkdev(clk, NULL, "rtc-spear");
|
||||
|
||||
/* clock derived from 30 MHz osc clk */
|
||||
clk = clk_register_fixed_rate(NULL, "pll3_48m_clk", "osc_24m_clk", 0,
|
||||
clk = clk_register_fixed_rate(NULL, "pll3_clk", "osc_24m_clk", 0,
|
||||
48000000);
|
||||
clk_register_clkdev(clk, "pll3_48m_clk", NULL);
|
||||
clk_register_clkdev(clk, "pll3_clk", NULL);
|
||||
|
||||
clk = clk_register_vco_pll("vco1_clk", "pll1_clk", NULL, "osc_30m_clk",
|
||||
0, PLL1_CTR, PLL1_FRQ, pll_rtbl, ARRAY_SIZE(pll_rtbl),
|
||||
@@ -146,9 +145,9 @@ void __init spear6xx_clk_init(void)
|
||||
clk_register_clkdev(clk, "vco1_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll1_clk", NULL);
|
||||
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL,
|
||||
"osc_30m_clk", 0, PLL2_CTR, PLL2_FRQ, pll_rtbl,
|
||||
ARRAY_SIZE(pll_rtbl), &_lock, &clk1, NULL);
|
||||
clk = clk_register_vco_pll("vco2_clk", "pll2_clk", NULL, "osc_30m_clk",
|
||||
0, PLL2_CTR, PLL2_FRQ, pll_rtbl, ARRAY_SIZE(pll_rtbl),
|
||||
&_lock, &clk1, NULL);
|
||||
clk_register_clkdev(clk, "vco2_clk", NULL);
|
||||
clk_register_clkdev(clk1, "pll2_clk", NULL);
|
||||
|
||||
@@ -165,111 +164,111 @@ void __init spear6xx_clk_init(void)
|
||||
HCLK_RATIO_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ahb_clk", NULL);
|
||||
|
||||
clk = clk_register_aux("uart_synth_clk", "uart_synth_gate_clk",
|
||||
"pll1_clk", 0, UART_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("uart_syn_clk", "uart_syn_gclk", "pll1_clk", 0,
|
||||
UART_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "uart_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "uart_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "uart_mux_clk", uart_parents,
|
||||
clk = clk_register_mux(NULL, "uart_mclk", uart_parents,
|
||||
ARRAY_SIZE(uart_parents), 0, PERIP_CLK_CFG,
|
||||
UART_CLK_SHIFT, UART_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "uart_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "uart_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "uart0", "uart_mux_clk", 0,
|
||||
PERIP1_CLK_ENB, UART0_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "uart0", "uart_mclk", 0, PERIP1_CLK_ENB,
|
||||
UART0_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "d0000000.serial");
|
||||
|
||||
clk = clk_register_gate(NULL, "uart1", "uart_mux_clk", 0,
|
||||
PERIP1_CLK_ENB, UART1_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "uart1", "uart_mclk", 0, PERIP1_CLK_ENB,
|
||||
UART1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "d0080000.serial");
|
||||
|
||||
clk = clk_register_aux("firda_synth_clk", "firda_synth_gate_clk",
|
||||
"pll1_clk", 0, FIRDA_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "firda_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "firda_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("firda_syn_clk", "firda_syn_gclk", "pll1_clk",
|
||||
0, FIRDA_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "firda_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "firda_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "firda_mux_clk", firda_parents,
|
||||
clk = clk_register_mux(NULL, "firda_mclk", firda_parents,
|
||||
ARRAY_SIZE(firda_parents), 0, PERIP_CLK_CFG,
|
||||
FIRDA_CLK_SHIFT, FIRDA_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "firda_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "firda_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "firda_clk", "firda_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "firda_clk", "firda_mclk", 0,
|
||||
PERIP1_CLK_ENB, FIRDA_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "firda");
|
||||
|
||||
clk = clk_register_aux("clcd_synth_clk", "clcd_synth_gate_clk",
|
||||
"pll1_clk", 0, CLCD_CLK_SYNT, NULL, aux_rtbl,
|
||||
ARRAY_SIZE(aux_rtbl), &_lock, &clk1);
|
||||
clk_register_clkdev(clk, "clcd_synth_clk", NULL);
|
||||
clk_register_clkdev(clk1, "clcd_synth_gate_clk", NULL);
|
||||
clk = clk_register_aux("clcd_syn_clk", "clcd_syn_gclk", "pll1_clk",
|
||||
0, CLCD_CLK_SYNT, NULL, aux_rtbl, ARRAY_SIZE(aux_rtbl),
|
||||
&_lock, &clk1);
|
||||
clk_register_clkdev(clk, "clcd_syn_clk", NULL);
|
||||
clk_register_clkdev(clk1, "clcd_syn_gclk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "clcd_mux_clk", clcd_parents,
|
||||
clk = clk_register_mux(NULL, "clcd_mclk", clcd_parents,
|
||||
ARRAY_SIZE(clcd_parents), 0, PERIP_CLK_CFG,
|
||||
CLCD_CLK_SHIFT, CLCD_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "clcd_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "clcd_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "clcd_clk", "clcd_mclk", 0,
|
||||
PERIP1_CLK_ENB, CLCD_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "clcd");
|
||||
|
||||
/* gpt clocks */
|
||||
clk = clk_register_gpt("gpt0_1_synth_clk", "pll1_clk", 0, PRSC0_CLK_CFG,
|
||||
clk = clk_register_gpt("gpt0_1_syn_clk", "pll1_clk", 0, PRSC0_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "gpt0_1_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt0_1_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt0_mux_clk", gpt0_1_parents,
|
||||
clk = clk_register_mux(NULL, "gpt0_mclk", gpt0_1_parents,
|
||||
ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG,
|
||||
GPT0_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt0");
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt1_mux_clk", gpt0_1_parents,
|
||||
clk = clk_register_mux(NULL, "gpt1_mclk", gpt0_1_parents,
|
||||
ARRAY_SIZE(gpt0_1_parents), 0, PERIP_CLK_CFG,
|
||||
GPT1_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gpt1_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt1_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "gpt1_clk", "gpt1_mclk", 0,
|
||||
PERIP1_CLK_ENB, GPT1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt1");
|
||||
|
||||
clk = clk_register_gpt("gpt2_synth_clk", "pll1_clk", 0, PRSC1_CLK_CFG,
|
||||
clk = clk_register_gpt("gpt2_syn_clk", "pll1_clk", 0, PRSC1_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "gpt2_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt2_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt2_mux_clk", gpt2_parents,
|
||||
clk = clk_register_mux(NULL, "gpt2_mclk", gpt2_parents,
|
||||
ARRAY_SIZE(gpt2_parents), 0, PERIP_CLK_CFG,
|
||||
GPT2_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gpt2_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt2_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "gpt2_clk", "gpt2_mclk", 0,
|
||||
PERIP1_CLK_ENB, GPT2_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt2");
|
||||
|
||||
clk = clk_register_gpt("gpt3_synth_clk", "pll1_clk", 0, PRSC2_CLK_CFG,
|
||||
clk = clk_register_gpt("gpt3_syn_clk", "pll1_clk", 0, PRSC2_CLK_CFG,
|
||||
gpt_rtbl, ARRAY_SIZE(gpt_rtbl), &_lock);
|
||||
clk_register_clkdev(clk, "gpt3_synth_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt3_syn_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "gpt3_mux_clk", gpt3_parents,
|
||||
clk = clk_register_mux(NULL, "gpt3_mclk", gpt3_parents,
|
||||
ARRAY_SIZE(gpt3_parents), 0, PERIP_CLK_CFG,
|
||||
GPT3_CLK_SHIFT, GPT_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "gpt3_mux_clk", NULL);
|
||||
clk_register_clkdev(clk, "gpt3_mclk", NULL);
|
||||
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mux_clk", 0,
|
||||
clk = clk_register_gate(NULL, "gpt3_clk", "gpt3_mclk", 0,
|
||||
PERIP1_CLK_ENB, GPT3_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "gpt3");
|
||||
|
||||
/* clock derived from pll3 clk */
|
||||
clk = clk_register_gate(NULL, "usbh0_clk", "pll3_48m_clk", 0,
|
||||
clk = clk_register_gate(NULL, "usbh0_clk", "pll3_clk", 0,
|
||||
PERIP1_CLK_ENB, USBH0_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "usbh.0_clk");
|
||||
|
||||
clk = clk_register_gate(NULL, "usbh1_clk", "pll3_48m_clk", 0,
|
||||
clk = clk_register_gate(NULL, "usbh1_clk", "pll3_clk", 0,
|
||||
PERIP1_CLK_ENB, USBH1_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "usbh.1_clk");
|
||||
|
||||
clk = clk_register_gate(NULL, "usbd_clk", "pll3_48m_clk", 0,
|
||||
PERIP1_CLK_ENB, USBD_CLK_ENB, 0, &_lock);
|
||||
clk = clk_register_gate(NULL, "usbd_clk", "pll3_clk", 0, PERIP1_CLK_ENB,
|
||||
USBD_CLK_ENB, 0, &_lock);
|
||||
clk_register_clkdev(clk, NULL, "designware_udc");
|
||||
|
||||
/* clock derived from ahb clk */
|
||||
@@ -278,9 +277,8 @@ void __init spear6xx_clk_init(void)
|
||||
clk_register_clkdev(clk, "ahbmult2_clk", NULL);
|
||||
|
||||
clk = clk_register_mux(NULL, "ddr_clk", ddr_parents,
|
||||
ARRAY_SIZE(ddr_parents),
|
||||
0, PLL_CLK_CFG, MCTR_CLK_SHIFT, MCTR_CLK_MASK, 0,
|
||||
&_lock);
|
||||
ARRAY_SIZE(ddr_parents), 0, PLL_CLK_CFG, MCTR_CLK_SHIFT,
|
||||
MCTR_CLK_MASK, 0, &_lock);
|
||||
clk_register_clkdev(clk, "ddr_clk", NULL);
|
||||
|
||||
clk = clk_register_divider(NULL, "apb_clk", "ahb_clk",
|
||||
|
||||
@@ -78,21 +78,6 @@ static int cdv_backlight_combination_mode(struct drm_device *dev)
|
||||
return REG_READ(BLC_PWM_CTL2) & PWM_LEGACY_MODE;
|
||||
}
|
||||
|
||||
static int cdv_get_brightness(struct backlight_device *bd)
|
||||
{
|
||||
struct drm_device *dev = bl_get_data(bd);
|
||||
u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
|
||||
|
||||
if (cdv_backlight_combination_mode(dev)) {
|
||||
u8 lbpc;
|
||||
|
||||
val &= ~1;
|
||||
pci_read_config_byte(dev->pdev, 0xF4, &lbpc);
|
||||
val *= lbpc;
|
||||
}
|
||||
return val;
|
||||
}
|
||||
|
||||
static u32 cdv_get_max_backlight(struct drm_device *dev)
|
||||
{
|
||||
u32 max = REG_READ(BLC_PWM_CTL);
|
||||
@@ -110,6 +95,22 @@ static u32 cdv_get_max_backlight(struct drm_device *dev)
|
||||
return max;
|
||||
}
|
||||
|
||||
static int cdv_get_brightness(struct backlight_device *bd)
|
||||
{
|
||||
struct drm_device *dev = bl_get_data(bd);
|
||||
u32 val = REG_READ(BLC_PWM_CTL) & BACKLIGHT_DUTY_CYCLE_MASK;
|
||||
|
||||
if (cdv_backlight_combination_mode(dev)) {
|
||||
u8 lbpc;
|
||||
|
||||
val &= ~1;
|
||||
pci_read_config_byte(dev->pdev, 0xF4, &lbpc);
|
||||
val *= lbpc;
|
||||
}
|
||||
return (val * 100)/cdv_get_max_backlight(dev);
|
||||
|
||||
}
|
||||
|
||||
static int cdv_set_brightness(struct backlight_device *bd)
|
||||
{
|
||||
struct drm_device *dev = bl_get_data(bd);
|
||||
@@ -120,6 +121,9 @@ static int cdv_set_brightness(struct backlight_device *bd)
|
||||
if (level < 1)
|
||||
level = 1;
|
||||
|
||||
level *= cdv_get_max_backlight(dev);
|
||||
level /= 100;
|
||||
|
||||
if (cdv_backlight_combination_mode(dev)) {
|
||||
u32 max = cdv_get_max_backlight(dev);
|
||||
u8 lbpc;
|
||||
@@ -157,7 +161,6 @@ static int cdv_backlight_init(struct drm_device *dev)
|
||||
|
||||
cdv_backlight_device->props.brightness =
|
||||
cdv_get_brightness(cdv_backlight_device);
|
||||
cdv_backlight_device->props.max_brightness = cdv_get_max_backlight(dev);
|
||||
backlight_update_status(cdv_backlight_device);
|
||||
dev_priv->backlight_device = cdv_backlight_device;
|
||||
return 0;
|
||||
|
||||
@@ -144,6 +144,8 @@ struct opregion_asle {
|
||||
|
||||
#define ASLE_CBLV_VALID (1<<31)
|
||||
|
||||
static struct psb_intel_opregion *system_opregion;
|
||||
|
||||
static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
@@ -205,7 +207,7 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
struct opregion_asle *asle = dev_priv->opregion.asle;
|
||||
|
||||
if (asle) {
|
||||
if (asle && system_opregion ) {
|
||||
/* Don't do this on Medfield or other non PC like devices, they
|
||||
use the bit for something different altogether */
|
||||
psb_enable_pipestat(dev_priv, 0, PIPE_LEGACY_BLC_EVENT_ENABLE);
|
||||
@@ -221,7 +223,6 @@ void psb_intel_opregion_enable_asle(struct drm_device *dev)
|
||||
#define ACPI_EV_LID (1<<1)
|
||||
#define ACPI_EV_DOCK (1<<2)
|
||||
|
||||
static struct psb_intel_opregion *system_opregion;
|
||||
|
||||
static int psb_intel_opregion_video_event(struct notifier_block *nb,
|
||||
unsigned long val, void *data)
|
||||
@@ -266,9 +267,6 @@ void psb_intel_opregion_init(struct drm_device *dev)
|
||||
system_opregion = opregion;
|
||||
register_acpi_notifier(&psb_intel_opregion_notifier);
|
||||
}
|
||||
|
||||
if (opregion->asle)
|
||||
psb_intel_opregion_enable_asle(dev);
|
||||
}
|
||||
|
||||
void psb_intel_opregion_fini(struct drm_device *dev)
|
||||
|
||||
@@ -27,6 +27,7 @@ extern void psb_intel_opregion_asle_intr(struct drm_device *dev);
|
||||
extern void psb_intel_opregion_init(struct drm_device *dev);
|
||||
extern void psb_intel_opregion_fini(struct drm_device *dev);
|
||||
extern int psb_intel_opregion_setup(struct drm_device *dev);
|
||||
extern void psb_intel_opregion_enable_asle(struct drm_device *dev);
|
||||
|
||||
#else
|
||||
|
||||
@@ -46,4 +47,8 @@ extern inline int psb_intel_opregion_setup(struct drm_device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern inline void psb_intel_opregion_enable_asle(struct drm_device *dev)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -144,6 +144,10 @@ static int psb_backlight_init(struct drm_device *dev)
|
||||
psb_backlight_device->props.max_brightness = 100;
|
||||
backlight_update_status(psb_backlight_device);
|
||||
dev_priv->backlight_device = psb_backlight_device;
|
||||
|
||||
/* This must occur after the backlight is properly initialised */
|
||||
psb_lid_timer_init(dev_priv);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -354,13 +358,6 @@ static int psb_chip_setup(struct drm_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Not exactly an erratum more an irritation */
|
||||
static void psb_chip_errata(struct drm_device *dev)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
psb_lid_timer_init(dev_priv);
|
||||
}
|
||||
|
||||
static void psb_chip_teardown(struct drm_device *dev)
|
||||
{
|
||||
struct drm_psb_private *dev_priv = dev->dev_private;
|
||||
@@ -379,7 +376,6 @@ const struct psb_ops psb_chip_ops = {
|
||||
.sgx_offset = PSB_SGX_OFFSET,
|
||||
.chip_setup = psb_chip_setup,
|
||||
.chip_teardown = psb_chip_teardown,
|
||||
.errata = psb_chip_errata,
|
||||
|
||||
.crtc_helper = &psb_intel_helper_funcs,
|
||||
.crtc_funcs = &psb_intel_crtc_funcs,
|
||||
|
||||
@@ -374,6 +374,7 @@ static int psb_driver_load(struct drm_device *dev, unsigned long chipset)
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
psb_intel_opregion_enable_asle(dev);
|
||||
#if 0
|
||||
/*enable runtime pm at last*/
|
||||
pm_runtime_enable(&dev->pdev->dev);
|
||||
|
||||
@@ -386,6 +386,7 @@ config HID_MULTITOUCH
|
||||
- Unitec Panels
|
||||
- XAT optical touch panels
|
||||
- Xiroku optical touch panels
|
||||
- Zytronic touch panels
|
||||
|
||||
If unsure, say N.
|
||||
|
||||
|
||||
@@ -659,6 +659,9 @@
|
||||
#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
|
||||
#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600
|
||||
|
||||
#define USB_VENDOR_ID_SENNHEISER 0x1395
|
||||
#define USB_DEVICE_ID_SENNHEISER_BTD500USB 0x002c
|
||||
|
||||
#define USB_VENDOR_ID_SIGMA_MICRO 0x1c4f
|
||||
#define USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD 0x0002
|
||||
|
||||
@@ -808,6 +811,9 @@
|
||||
#define USB_VENDOR_ID_ZYDACRON 0x13EC
|
||||
#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006
|
||||
|
||||
#define USB_VENDOR_ID_ZYTRONIC 0x14c8
|
||||
#define USB_DEVICE_ID_ZYTRONIC_ZXY100 0x0005
|
||||
|
||||
#define USB_VENDOR_ID_PRIMAX 0x0461
|
||||
#define USB_DEVICE_ID_PRIMAX_KEYBOARD 0x4e05
|
||||
|
||||
|
||||
@@ -301,6 +301,9 @@ static const struct hid_device_id hid_battery_quirks[] = {
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
|
||||
USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI),
|
||||
HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
|
||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE,
|
||||
USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI),
|
||||
HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE },
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
@@ -1048,6 +1048,11 @@ static const struct hid_device_id mt_devices[] = {
|
||||
MT_USB_DEVICE(USB_VENDOR_ID_XIROKU,
|
||||
USB_DEVICE_ID_XIROKU_CSR2) },
|
||||
|
||||
/* Zytronic panels */
|
||||
{ .driver_data = MT_CLS_SERIAL,
|
||||
MT_USB_DEVICE(USB_VENDOR_ID_ZYTRONIC,
|
||||
USB_DEVICE_ID_ZYTRONIC_ZXY100) },
|
||||
|
||||
/* Generic MT device */
|
||||
{ HID_DEVICE(HID_BUS_ANY, HID_GROUP_MULTITOUCH, HID_ANY_ID, HID_ANY_ID) },
|
||||
{ }
|
||||
|
||||
@@ -76,6 +76,7 @@ static const struct hid_blacklist {
|
||||
{ USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH_3008, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD500USB, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2, HID_QUIRK_NOGET },
|
||||
|
||||
@@ -123,7 +123,7 @@ static void ipoib_ud_skb_put_frags(struct ipoib_dev_priv *priv,
|
||||
|
||||
skb_frag_size_set(frag, size);
|
||||
skb->data_len += size;
|
||||
skb->truesize += size;
|
||||
skb->truesize += PAGE_SIZE;
|
||||
} else
|
||||
skb_put(skb, length);
|
||||
|
||||
@@ -156,14 +156,18 @@ static struct sk_buff *ipoib_alloc_rx_skb(struct net_device *dev, int id)
|
||||
struct ipoib_dev_priv *priv = netdev_priv(dev);
|
||||
struct sk_buff *skb;
|
||||
int buf_size;
|
||||
int tailroom;
|
||||
u64 *mapping;
|
||||
|
||||
if (ipoib_ud_need_sg(priv->max_ib_mtu))
|
||||
if (ipoib_ud_need_sg(priv->max_ib_mtu)) {
|
||||
buf_size = IPOIB_UD_HEAD_SIZE;
|
||||
else
|
||||
tailroom = 128; /* reserve some tailroom for IP/TCP headers */
|
||||
} else {
|
||||
buf_size = IPOIB_UD_BUF_SIZE(priv->max_ib_mtu);
|
||||
tailroom = 0;
|
||||
}
|
||||
|
||||
skb = dev_alloc_skb(buf_size + 4);
|
||||
skb = dev_alloc_skb(buf_size + tailroom + 4);
|
||||
if (unlikely(!skb))
|
||||
return NULL;
|
||||
|
||||
|
||||
@@ -135,8 +135,8 @@ send_layer2(struct mISDNstack *st, struct sk_buff *skb)
|
||||
skb = NULL;
|
||||
else if (*debug & DEBUG_SEND_ERR)
|
||||
printk(KERN_DEBUG
|
||||
"%s ch%d mgr prim(%x) addr(%x) err %d\n",
|
||||
__func__, ch->nr, hh->prim, ch->addr, ret);
|
||||
"%s mgr prim(%x) err %d\n",
|
||||
__func__, hh->prim, ret);
|
||||
}
|
||||
out:
|
||||
mutex_unlock(&st->lmutex);
|
||||
|
||||
@@ -1084,6 +1084,7 @@ static int mirror_ctr(struct dm_target *ti, unsigned int argc, char **argv)
|
||||
ti->split_io = dm_rh_get_region_size(ms->rh);
|
||||
ti->num_flush_requests = 1;
|
||||
ti->num_discard_requests = 1;
|
||||
ti->discard_zeroes_data_unsupported = 1;
|
||||
|
||||
ms->kmirrord_wq = alloc_workqueue("kmirrord",
|
||||
WQ_NON_REENTRANT | WQ_MEM_RECLAIM, 0);
|
||||
@@ -1214,7 +1215,7 @@ static int mirror_end_io(struct dm_target *ti, struct bio *bio,
|
||||
* We need to dec pending if this was a write.
|
||||
*/
|
||||
if (rw == WRITE) {
|
||||
if (!(bio->bi_rw & REQ_FLUSH))
|
||||
if (!(bio->bi_rw & (REQ_FLUSH | REQ_DISCARD)))
|
||||
dm_rh_dec(ms->rh, map_context->ll);
|
||||
return error;
|
||||
}
|
||||
|
||||
@@ -404,6 +404,9 @@ void dm_rh_mark_nosync(struct dm_region_hash *rh, struct bio *bio)
|
||||
return;
|
||||
}
|
||||
|
||||
if (bio->bi_rw & REQ_DISCARD)
|
||||
return;
|
||||
|
||||
/* We must inform the log that the sync count has changed. */
|
||||
log->type->set_region_sync(log, region, 0);
|
||||
|
||||
@@ -524,7 +527,7 @@ void dm_rh_inc_pending(struct dm_region_hash *rh, struct bio_list *bios)
|
||||
struct bio *bio;
|
||||
|
||||
for (bio = bios->head; bio; bio = bio->bi_next) {
|
||||
if (bio->bi_rw & REQ_FLUSH)
|
||||
if (bio->bi_rw & (REQ_FLUSH | REQ_DISCARD))
|
||||
continue;
|
||||
rh_inc(rh, dm_rh_bio_to_region(rh, bio));
|
||||
}
|
||||
|
||||
@@ -1245,7 +1245,10 @@ static void process_discard(struct thin_c *tc, struct bio *bio)
|
||||
|
||||
cell_release_singleton(cell, bio);
|
||||
cell_release_singleton(cell2, bio);
|
||||
remap_and_issue(tc, bio, lookup_result.block);
|
||||
if ((!lookup_result.shared) && pool->pf.discard_passdown)
|
||||
remap_and_issue(tc, bio, lookup_result.block);
|
||||
else
|
||||
bio_endio(bio, 0);
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -2628,6 +2631,7 @@ static int thin_ctr(struct dm_target *ti, unsigned argc, char **argv)
|
||||
if (tc->pool->pf.discard_enabled) {
|
||||
ti->discards_supported = 1;
|
||||
ti->num_discard_requests = 1;
|
||||
ti->discard_zeroes_data_unsupported = 1;
|
||||
}
|
||||
|
||||
dm_put(pool_md);
|
||||
|
||||
@@ -2931,6 +2931,7 @@ offset_store(struct md_rdev *rdev, const char *buf, size_t len)
|
||||
* can be sane */
|
||||
return -EBUSY;
|
||||
rdev->data_offset = offset;
|
||||
rdev->new_data_offset = offset;
|
||||
return len;
|
||||
}
|
||||
|
||||
@@ -3926,8 +3927,8 @@ array_state_show(struct mddev *mddev, char *page)
|
||||
return sprintf(page, "%s\n", array_states[st]);
|
||||
}
|
||||
|
||||
static int do_md_stop(struct mddev * mddev, int ro, int is_open);
|
||||
static int md_set_readonly(struct mddev * mddev, int is_open);
|
||||
static int do_md_stop(struct mddev * mddev, int ro, struct block_device *bdev);
|
||||
static int md_set_readonly(struct mddev * mddev, struct block_device *bdev);
|
||||
static int do_md_run(struct mddev * mddev);
|
||||
static int restart_array(struct mddev *mddev);
|
||||
|
||||
@@ -3943,14 +3944,14 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
|
||||
/* stopping an active array */
|
||||
if (atomic_read(&mddev->openers) > 0)
|
||||
return -EBUSY;
|
||||
err = do_md_stop(mddev, 0, 0);
|
||||
err = do_md_stop(mddev, 0, NULL);
|
||||
break;
|
||||
case inactive:
|
||||
/* stopping an active array */
|
||||
if (mddev->pers) {
|
||||
if (atomic_read(&mddev->openers) > 0)
|
||||
return -EBUSY;
|
||||
err = do_md_stop(mddev, 2, 0);
|
||||
err = do_md_stop(mddev, 2, NULL);
|
||||
} else
|
||||
err = 0; /* already inactive */
|
||||
break;
|
||||
@@ -3958,7 +3959,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
|
||||
break; /* not supported yet */
|
||||
case readonly:
|
||||
if (mddev->pers)
|
||||
err = md_set_readonly(mddev, 0);
|
||||
err = md_set_readonly(mddev, NULL);
|
||||
else {
|
||||
mddev->ro = 1;
|
||||
set_disk_ro(mddev->gendisk, 1);
|
||||
@@ -3968,7 +3969,7 @@ array_state_store(struct mddev *mddev, const char *buf, size_t len)
|
||||
case read_auto:
|
||||
if (mddev->pers) {
|
||||
if (mddev->ro == 0)
|
||||
err = md_set_readonly(mddev, 0);
|
||||
err = md_set_readonly(mddev, NULL);
|
||||
else if (mddev->ro == 1)
|
||||
err = restart_array(mddev);
|
||||
if (err == 0) {
|
||||
@@ -5351,15 +5352,17 @@ void md_stop(struct mddev *mddev)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(md_stop);
|
||||
|
||||
static int md_set_readonly(struct mddev *mddev, int is_open)
|
||||
static int md_set_readonly(struct mddev *mddev, struct block_device *bdev)
|
||||
{
|
||||
int err = 0;
|
||||
mutex_lock(&mddev->open_mutex);
|
||||
if (atomic_read(&mddev->openers) > is_open) {
|
||||
if (atomic_read(&mddev->openers) > !!bdev) {
|
||||
printk("md: %s still in use.\n",mdname(mddev));
|
||||
err = -EBUSY;
|
||||
goto out;
|
||||
}
|
||||
if (bdev)
|
||||
sync_blockdev(bdev);
|
||||
if (mddev->pers) {
|
||||
__md_stop_writes(mddev);
|
||||
|
||||
@@ -5381,18 +5384,26 @@ out:
|
||||
* 0 - completely stop and dis-assemble array
|
||||
* 2 - stop but do not disassemble array
|
||||
*/
|
||||
static int do_md_stop(struct mddev * mddev, int mode, int is_open)
|
||||
static int do_md_stop(struct mddev * mddev, int mode,
|
||||
struct block_device *bdev)
|
||||
{
|
||||
struct gendisk *disk = mddev->gendisk;
|
||||
struct md_rdev *rdev;
|
||||
|
||||
mutex_lock(&mddev->open_mutex);
|
||||
if (atomic_read(&mddev->openers) > is_open ||
|
||||
if (atomic_read(&mddev->openers) > !!bdev ||
|
||||
mddev->sysfs_active) {
|
||||
printk("md: %s still in use.\n",mdname(mddev));
|
||||
mutex_unlock(&mddev->open_mutex);
|
||||
return -EBUSY;
|
||||
}
|
||||
if (bdev)
|
||||
/* It is possible IO was issued on some other
|
||||
* open file which was closed before we took ->open_mutex.
|
||||
* As that was not the last close __blkdev_put will not
|
||||
* have called sync_blockdev, so we must.
|
||||
*/
|
||||
sync_blockdev(bdev);
|
||||
|
||||
if (mddev->pers) {
|
||||
if (mddev->ro)
|
||||
@@ -5466,7 +5477,7 @@ static void autorun_array(struct mddev *mddev)
|
||||
err = do_md_run(mddev);
|
||||
if (err) {
|
||||
printk(KERN_WARNING "md: do_md_run() returned %d\n", err);
|
||||
do_md_stop(mddev, 0, 0);
|
||||
do_md_stop(mddev, 0, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6481,11 +6492,11 @@ static int md_ioctl(struct block_device *bdev, fmode_t mode,
|
||||
goto done_unlock;
|
||||
|
||||
case STOP_ARRAY:
|
||||
err = do_md_stop(mddev, 0, 1);
|
||||
err = do_md_stop(mddev, 0, bdev);
|
||||
goto done_unlock;
|
||||
|
||||
case STOP_ARRAY_RO:
|
||||
err = md_set_readonly(mddev, 1);
|
||||
err = md_set_readonly(mddev, bdev);
|
||||
goto done_unlock;
|
||||
|
||||
case BLKROSET:
|
||||
|
||||
@@ -1818,8 +1818,14 @@ static void sync_request_write(struct mddev *mddev, struct r1bio *r1_bio)
|
||||
|
||||
if (atomic_dec_and_test(&r1_bio->remaining)) {
|
||||
/* if we're here, all write(s) have completed, so clean up */
|
||||
md_done_sync(mddev, r1_bio->sectors, 1);
|
||||
put_buf(r1_bio);
|
||||
int s = r1_bio->sectors;
|
||||
if (test_bit(R1BIO_MadeGood, &r1_bio->state) ||
|
||||
test_bit(R1BIO_WriteError, &r1_bio->state))
|
||||
reschedule_retry(r1_bio);
|
||||
else {
|
||||
put_buf(r1_bio);
|
||||
md_done_sync(mddev, s, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -904,9 +904,6 @@ static int cx25821_dev_setup(struct cx25821_dev *dev)
|
||||
list_add_tail(&dev->devlist, &cx25821_devlist);
|
||||
mutex_unlock(&cx25821_devlist_mutex);
|
||||
|
||||
strcpy(cx25821_boards[UNKNOWN_BOARD].name, "unknown");
|
||||
strcpy(cx25821_boards[CX25821_BOARD].name, "cx25821");
|
||||
|
||||
if (dev->pci->device != 0x8210) {
|
||||
pr_info("%s(): Exiting. Incorrect Hardware device = 0x%02x\n",
|
||||
__func__, dev->pci->device);
|
||||
|
||||
@@ -187,7 +187,7 @@ enum port {
|
||||
};
|
||||
|
||||
struct cx25821_board {
|
||||
char *name;
|
||||
const char *name;
|
||||
enum port porta;
|
||||
enum port portb;
|
||||
enum port portc;
|
||||
|
||||
@@ -681,6 +681,7 @@ static void determine_valid_ioctls(struct video_device *vdev)
|
||||
SET_VALID_IOCTL(ops, VIDIOC_G_DV_TIMINGS, vidioc_g_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_ENUM_DV_TIMINGS, vidioc_enum_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_QUERY_DV_TIMINGS, vidioc_query_dv_timings);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_DV_TIMINGS_CAP, vidioc_dv_timings_cap);
|
||||
/* yes, really vidioc_subscribe_event */
|
||||
SET_VALID_IOCTL(ops, VIDIOC_DQEVENT, vidioc_subscribe_event);
|
||||
SET_VALID_IOCTL(ops, VIDIOC_SUBSCRIBE_EVENT, vidioc_subscribe_event);
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#include "bonding.h"
|
||||
#include "bond_alb.h"
|
||||
|
||||
#ifdef CONFIG_DEBUG_FS
|
||||
#if defined(CONFIG_DEBUG_FS) && !defined(CONFIG_NET_NS)
|
||||
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/seq_file.h>
|
||||
|
||||
@@ -3227,6 +3227,12 @@ static int bond_master_netdev_event(unsigned long event,
|
||||
switch (event) {
|
||||
case NETDEV_CHANGENAME:
|
||||
return bond_event_changename(event_bond);
|
||||
case NETDEV_UNREGISTER:
|
||||
bond_remove_proc_entry(event_bond);
|
||||
break;
|
||||
case NETDEV_REGISTER:
|
||||
bond_create_proc_entry(event_bond);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
@@ -4411,8 +4417,6 @@ static void bond_uninit(struct net_device *bond_dev)
|
||||
|
||||
bond_work_cancel_all(bond);
|
||||
|
||||
bond_remove_proc_entry(bond);
|
||||
|
||||
bond_debug_unregister(bond);
|
||||
|
||||
__hw_addr_flush(&bond->mc_list);
|
||||
@@ -4814,7 +4818,6 @@ static int bond_init(struct net_device *bond_dev)
|
||||
|
||||
bond_set_lockdep_class(bond_dev);
|
||||
|
||||
bond_create_proc_entry(bond);
|
||||
list_add_tail(&bond->bond_list, &bn->dev_list);
|
||||
|
||||
bond_prepare_sysfs_group(bond);
|
||||
|
||||
@@ -261,7 +261,6 @@ static void atl1c_check_link_status(struct atl1c_adapter *adapter)
|
||||
if ((phy_data & BMSR_LSTATUS) == 0) {
|
||||
/* link down */
|
||||
netif_carrier_off(netdev);
|
||||
netif_stop_queue(netdev);
|
||||
hw->hibernate = true;
|
||||
if (atl1c_reset_mac(hw) != 0)
|
||||
if (netif_msg_hw(adapter))
|
||||
|
||||
@@ -656,7 +656,7 @@ static int b44_alloc_rx_skb(struct b44 *bp, int src_idx, u32 dest_idx_unmasked)
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping,
|
||||
RX_PKT_BUF_SZ, DMA_FROM_DEVICE);
|
||||
dev_kfree_skb_any(skb);
|
||||
skb = __netdev_alloc_skb(bp->dev, RX_PKT_BUF_SZ, GFP_ATOMIC|GFP_DMA);
|
||||
skb = alloc_skb(RX_PKT_BUF_SZ, GFP_ATOMIC | GFP_DMA);
|
||||
if (skb == NULL)
|
||||
return -ENOMEM;
|
||||
mapping = dma_map_single(bp->sdev->dma_dev, skb->data,
|
||||
@@ -967,7 +967,7 @@ static netdev_tx_t b44_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
dma_unmap_single(bp->sdev->dma_dev, mapping, len,
|
||||
DMA_TO_DEVICE);
|
||||
|
||||
bounce_skb = __netdev_alloc_skb(dev, len, GFP_ATOMIC | GFP_DMA);
|
||||
bounce_skb = alloc_skb(len, GFP_ATOMIC | GFP_DMA);
|
||||
if (!bounce_skb)
|
||||
goto err_out;
|
||||
|
||||
|
||||
@@ -5372,7 +5372,7 @@ bnx2_free_tx_skbs(struct bnx2 *bp)
|
||||
int k, last;
|
||||
|
||||
if (skb == NULL) {
|
||||
j++;
|
||||
j = NEXT_TX_BD(j);
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -5384,8 +5384,8 @@ bnx2_free_tx_skbs(struct bnx2 *bp)
|
||||
tx_buf->skb = NULL;
|
||||
|
||||
last = tx_buf->nr_frags;
|
||||
j++;
|
||||
for (k = 0; k < last; k++, j++) {
|
||||
j = NEXT_TX_BD(j);
|
||||
for (k = 0; k < last; k++, j = NEXT_TX_BD(j)) {
|
||||
tx_buf = &txr->tx_buf_ring[TX_RING_IDX(j)];
|
||||
dma_unmap_page(&bp->pdev->dev,
|
||||
dma_unmap_addr(tx_buf, mapping),
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user