Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
828aac2e
Commit
828aac2e
authored
Dec 19, 2008
by
Russell King
Committed by
Russell King
Dec 19, 2008
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-rmk' of
git://git.pengutronix.de/git/ukl/linux-2.6
into devel
parents
6fd7c7fe
7971db5a
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
127 additions
and
25 deletions
+127
-25
arch/arm/Kconfig
arch/arm/Kconfig
+2
-1
arch/arm/configs/netx_defconfig
arch/arm/configs/netx_defconfig
+3
-3
arch/arm/configs/picotux200_defconfig
arch/arm/configs/picotux200_defconfig
+3
-3
arch/arm/kernel/ftrace.c
arch/arm/kernel/ftrace.c
+1
-1
arch/arm/mach-at91/at91rm9200_time.c
arch/arm/mach-at91/at91rm9200_time.c
+9
-0
arch/arm/mach-netx/include/mach/netx-regs.h
arch/arm/mach-netx/include/mach/netx-regs.h
+22
-0
arch/arm/mach-netx/time.c
arch/arm/mach-netx/time.c
+84
-14
arch/arm/mach-netx/xc.c
arch/arm/mach-netx/xc.c
+3
-3
No files found.
arch/arm/Kconfig
View file @
828aac2e
...
...
@@ -156,7 +156,6 @@ config ARCH_MTD_XIP
bool
config GENERIC_HARDIRQS_NO__DO_IRQ
bool
def_bool y
if OPROFILE
...
...
@@ -288,6 +287,8 @@ config ARCH_NETX
bool "Hilscher NetX based"
select CPU_ARM926T
select ARM_VIC
select GENERIC_CLOCKEVENTS
select GENERIC_TIME
help
This enables support for systems based on the Hilscher NetX Soc
...
...
arch/arm/configs/netx_defconfig
View file @
828aac2e
...
...
@@ -728,9 +728,9 @@ CONFIG_RTC_CLASS=m
#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=
m
CONFIG_RTC_INTF_PROC=
m
CONFIG_RTC_INTF_DEV=
m
CONFIG_RTC_INTF_SYSFS=
y
CONFIG_RTC_INTF_PROC=
y
CONFIG_RTC_INTF_DEV=
y
#
# RTC drivers
...
...
arch/arm/configs/picotux200_defconfig
View file @
828aac2e
...
...
@@ -1069,9 +1069,9 @@ CONFIG_RTC_CLASS=m
#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=
m
CONFIG_RTC_INTF_PROC=
m
CONFIG_RTC_INTF_DEV=
m
CONFIG_RTC_INTF_SYSFS=
y
CONFIG_RTC_INTF_PROC=
y
CONFIG_RTC_INTF_DEV=
y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
#
...
...
arch/arm/kernel/ftrace.c
View file @
828aac2e
...
...
@@ -95,7 +95,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
return
ret
;
}
/* run from
kstop_machine
*/
/* run from
ftrace_init with irqs disabled
*/
int
__init
ftrace_dyn_arch_init
(
void
*
data
)
{
ftrace_mcount_set
(
data
);
...
...
arch/arm/mach-at91/at91rm9200_time.c
View file @
828aac2e
...
...
@@ -141,6 +141,15 @@ clkevt32k_next_event(unsigned long delta, struct clock_event_device *dev)
/* Use "raw" primitives so we behave correctly on RT kernels. */
raw_local_irq_save
(
flags
);
/*
* According to Thomas Gleixner irqs are already disabled here. Simply
* removing raw_local_irq_save above (and the matching
* raw_local_irq_restore) was not accepted. See
* http://thread.gmane.org/gmane.linux.ports.arm.kernel/41174
* So for now (2008-11-20) just warn once if irqs were not disabled ...
*/
WARN_ON_ONCE
(
!
raw_irqs_disabled_flags
(
flags
));
/* The alarm IRQ uses absolute time (now+delta), not the relative
* time (delta) in our calling convention. Like all clockevents
* using such "match" hardware, we have a race to defend against.
...
...
arch/arm/mach-netx/include/mach/netx-regs.h
View file @
828aac2e
...
...
@@ -328,6 +328,28 @@
#define NETX_PFIFO_FILL_LEVEL(pfifo) NETX_PFIFO_REG(0x180 + ((pfifo)<<2))
#define NETX_PFIFO_XPEC_ISR(xpec) NETX_PFIFO_REG(0x400 + ((xpec) << 2))
/*******************************
* Memory Controller *
*******************************/
/* Registers */
#define NETX_MEMCR_REG(ofs) __io(NETX_VA_MEMCR + (ofs))
#define NETX_MEMCR_SRAM_CTRL(cs) NETX_MEMCR_REG(0x0 + 4 * (cs))
/* SRAM for CS 0..2 */
#define NETX_MEMCR_SDRAM_CFG_CTRL NETX_MEMCR_REG(0x40)
#define NETX_MEMCR_SDRAM_TIMING_CTRL NETX_MEMCR_REG(0x44)
#define NETX_MEMCR_SDRAM_MODE NETX_MEMCR_REG(0x48)
#define NETX_MEMCR_SDRAM_EXT_MODE NETX_MEMCR_REG(0x4c)
#define NETX_MEMCR_PRIO_TIMESLOT_CTRL NETX_MEMCR_REG(0x80)
#define NETX_MEMCR_PRIO_ACCESS_CTRL NETX_MEMCR_REG(0x84)
/* Bits */
#define NETX_MEMCR_SRAM_CTRL_WIDTHEXTMEM(x) (((x) & 0x3) << 24)
#define NETX_MEMCR_SRAM_CTRL_WSPOSTPAUSEEXTMEM(x) (((x) & 0x3) << 16)
#define NETX_MEMCR_SRAM_CTRL_WSPREPASEEXTMEM(x) (((x) & 0x3) << 8)
#define NETX_MEMCR_SRAM_CTRL_WSEXTMEM(x) (((x) & 0x1f) << 0)
/*******************************
* Dual Port Memory *
*******************************/
...
...
arch/arm/mach-netx/time.c
View file @
828aac2e
...
...
@@ -21,43 +21,100 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/clocksource.h>
#include <linux/clockchips.h>
#include <linux/io.h>
#include <mach/hardware.h>
#include <asm/mach/time.h>
#include <mach/netx-regs.h>
#define TIMER_CLOCKEVENT 0
#define TIMER_CLOCKSOURCE 1
static
void
netx_set_mode
(
enum
clock_event_mode
mode
,
struct
clock_event_device
*
clk
)
{
u32
tmode
;
/* disable timer */
writel
(
0
,
NETX_GPIO_COUNTER_CTRL
(
TIMER_CLOCKEVENT
));
switch
(
mode
)
{
case
CLOCK_EVT_MODE_PERIODIC
:
writel
(
LATCH
,
NETX_GPIO_COUNTER_MAX
(
TIMER_CLOCKEVENT
));
tmode
=
NETX_GPIO_COUNTER_CTRL_RST_EN
|
NETX_GPIO_COUNTER_CTRL_IRQ_EN
|
NETX_GPIO_COUNTER_CTRL_RUN
;
break
;
case
CLOCK_EVT_MODE_ONESHOT
:
writel
(
0
,
NETX_GPIO_COUNTER_MAX
(
TIMER_CLOCKEVENT
));
tmode
=
NETX_GPIO_COUNTER_CTRL_IRQ_EN
|
NETX_GPIO_COUNTER_CTRL_RUN
;
break
;
default:
WARN
(
1
,
"%s: unhandled mode %d
\n
"
,
__func__
,
mode
);
/* fall through */
case
CLOCK_EVT_MODE_SHUTDOWN
:
case
CLOCK_EVT_MODE_UNUSED
:
case
CLOCK_EVT_MODE_RESUME
:
tmode
=
0
;
break
;
}
writel
(
tmode
,
NETX_GPIO_COUNTER_CTRL
(
TIMER_CLOCKEVENT
));
}
static
int
netx_set_next_event
(
unsigned
long
evt
,
struct
clock_event_device
*
clk
)
{
writel
(
0
-
evt
,
NETX_GPIO_COUNTER_CURRENT
(
TIMER_CLOCKEVENT
));
return
0
;
}
static
struct
clock_event_device
netx_clockevent
=
{
.
name
=
"netx-timer"
__stringify
(
TIMER_CLOCKEVENT
),
.
shift
=
32
,
.
features
=
CLOCK_EVT_FEAT_PERIODIC
|
CLOCK_EVT_FEAT_ONESHOT
,
.
set_next_event
=
netx_set_next_event
,
.
set_mode
=
netx_set_mode
,
};
/*
* IRQ handler for the timer
*/
static
irqreturn_t
netx_timer_interrupt
(
int
irq
,
void
*
dev_id
)
{
timer_tick
()
;
struct
clock_event_device
*
evt
=
&
netx_clockevent
;
/* acknowledge interrupt */
writel
(
COUNTER_BIT
(
0
),
NETX_GPIO_IRQ
);
evt
->
event_handler
(
evt
);
return
IRQ_HANDLED
;
}
static
struct
irqaction
netx_timer_irq
=
{
.
name
=
"NetX Timer Tick"
,
.
flags
=
IRQF_DISABLED
|
IRQF_TIMER
|
IRQF_IRQPOLL
,
.
handler
=
netx_timer_interrupt
,
.
name
=
"NetX Timer Tick"
,
.
flags
=
IRQF_DISABLED
|
IRQF_TIMER
|
IRQF_IRQPOLL
,
.
handler
=
netx_timer_interrupt
,
};
cycle_t
netx_get_cycles
(
void
)
{
return
readl
(
NETX_GPIO_COUNTER_CURRENT
(
1
));
return
readl
(
NETX_GPIO_COUNTER_CURRENT
(
TIMER_CLOCKSOURCE
));
}
static
struct
clocksource
clocksource_netx
=
{
.
name
=
"netx_timer"
,
.
name
=
"netx_timer"
,
.
rating
=
200
,
.
read
=
netx_get_cycles
,
.
mask
=
CLOCKSOURCE_MASK
(
32
),
.
shift
=
20
,
.
shift
=
20
,
.
flags
=
CLOCK_SOURCE_IS_CONTINUOUS
,
};
...
...
@@ -77,24 +134,37 @@ static void __init netx_timer_init(void)
/* acknowledge interrupt */
writel
(
COUNTER_BIT
(
0
),
NETX_GPIO_IRQ
);
/* Enable the interrupt in the specific timer register and start timer */
/* Enable the interrupt in the specific timer
* register and start timer
*/
writel
(
COUNTER_BIT
(
0
),
NETX_GPIO_IRQ_ENABLE
);
writel
(
NETX_GPIO_COUNTER_CTRL_IRQ_EN
|
NETX_GPIO_COUNTER_CTRL_RUN
,
NETX_GPIO_COUNTER_CTRL
(
0
));
NETX_GPIO_COUNTER_CTRL
(
0
));
setup_irq
(
NETX_IRQ_TIMER0
,
&
netx_timer_irq
);
/* Setup timer one for clocksource */
writel
(
0
,
NETX_GPIO_COUNTER_CTRL
(
1
));
writel
(
0
,
NETX_GPIO_COUNTER_CURRENT
(
1
));
writel
(
0xFFFFFFFF
,
NETX_GPIO_COUNTER_MAX
(
1
));
writel
(
0
,
NETX_GPIO_COUNTER_CTRL
(
TIMER_CLOCKSOURCE
));
writel
(
0
,
NETX_GPIO_COUNTER_CURRENT
(
TIMER_CLOCKSOURCE
));
writel
(
0xffffffff
,
NETX_GPIO_COUNTER_MAX
(
TIMER_CLOCKSOURCE
));
writel
(
NETX_GPIO_COUNTER_CTRL_RUN
,
NETX_GPIO_COUNTER_CTRL
(
1
));
writel
(
NETX_GPIO_COUNTER_CTRL_RUN
,
NETX_GPIO_COUNTER_CTRL
(
TIMER_CLOCKSOURCE
));
clocksource_netx
.
mult
=
clocksource_hz2mult
(
CLOCK_TICK_RATE
,
clocksource_netx
.
shift
);
clocksource_register
(
&
clocksource_netx
);
netx_clockevent
.
mult
=
div_sc
(
CLOCK_TICK_RATE
,
NSEC_PER_SEC
,
netx_clockevent
.
shift
);
netx_clockevent
.
max_delta_ns
=
clockevent_delta2ns
(
0xfffffffe
,
&
netx_clockevent
);
/* with max_delta_ns >= delta2ns(0x800) the system currently runs fine.
* Adding some safety ... */
netx_clockevent
.
min_delta_ns
=
clockevent_delta2ns
(
0xa00
,
&
netx_clockevent
);
netx_clockevent
.
cpumask
=
cpumask_of_cpu
(
0
);
clockevents_register_device
(
&
netx_clockevent
);
}
struct
sys_timer
netx_timer
=
{
...
...
arch/arm/mach-netx/xc.c
View file @
828aac2e
...
...
@@ -92,10 +92,10 @@ static int xc_check_ptr(struct xc *x, unsigned long adr, unsigned int size)
return
-
1
;
}
static
int
xc_patch
(
struct
xc
*
x
,
void
*
patch
,
int
count
)
static
int
xc_patch
(
struct
xc
*
x
,
const
void
*
patch
,
int
count
)
{
unsigned
int
val
,
adr
;
unsigned
int
*
data
=
patch
;
const
unsigned
int
*
data
=
patch
;
int
i
;
for
(
i
=
0
;
i
<
count
;
i
++
)
{
...
...
@@ -117,7 +117,7 @@ int xc_request_firmware(struct xc *x)
struct
fw_header
*
head
;
unsigned
int
size
;
int
i
;
void
*
src
;
const
void
*
src
;
unsigned
long
dst
;
sprintf
(
name
,
"xc%d.bin"
,
x
->
no
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment