Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 129691
b: refs/heads/master
c: 5f7dc5d
h: refs/heads/master
i:
  129689: 22b7f94
  129687: 26f1298
v: v3
  • Loading branch information
Ivan Kokshaysky authored and Linus Torvalds committed Jan 16, 2009
1 parent 6142874 commit 82759fa
Show file tree
Hide file tree
Showing 10 changed files with 99 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2f88d151cb8e73587983d7feccd70672ff6730fe
refs/heads/master: 5f7dc5d75076fd1c1fc6bc09f2467509d20db24a
4 changes: 4 additions & 0 deletions trunk/arch/alpha/include/asm/machvec.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ struct pci_dev;
struct pci_ops;
struct pci_controller;
struct _alpha_agp_info;
struct rtc_time;

struct alpha_machine_vector
{
Expand Down Expand Up @@ -94,6 +95,9 @@ struct alpha_machine_vector

struct _alpha_agp_info *(*agp_info)(void);

unsigned int (*rtc_get_time)(struct rtc_time *);
int (*rtc_set_time)(struct rtc_time *);

const char *vector_name;

/* NUMA information */
Expand Down
12 changes: 9 additions & 3 deletions trunk/arch/alpha/include/asm/rtc.h
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
#ifndef _ALPHA_RTC_H
#define _ALPHA_RTC_H

/*
* Alpha uses the default access methods for the RTC.
*/
#if defined(CONFIG_ALPHA_GENERIC)
# define get_rtc_time alpha_mv.rtc_get_time
# define set_rtc_time alpha_mv.rtc_set_time
#else
# if defined(CONFIG_ALPHA_MARVEL) && defined(CONFIG_SMP)
# define get_rtc_time marvel_get_rtc_time
# define set_rtc_time marvel_set_rtc_time
# endif
#endif

#include <asm-generic/rtc.h>

Expand Down
10 changes: 1 addition & 9 deletions trunk/arch/alpha/kernel/core_marvel.c
Original file line number Diff line number Diff line change
Expand Up @@ -658,16 +658,8 @@ __marvel_rtc_io(u8 b, unsigned long addr, int write)
rtc_access.data = bcd2bin(b);
rtc_access.function = 0x48 + !write; /* GET/PUT_TOY */

#ifdef CONFIG_SMP
if (smp_processor_id() != boot_cpuid)
smp_call_function_single(boot_cpuid,
__marvel_access_rtc,
&rtc_access, 1);
else
__marvel_access_rtc(&rtc_access);
#else
__marvel_access_rtc(&rtc_access);
#endif

ret = bin2bcd(rtc_access.data);
break;

Expand Down
5 changes: 4 additions & 1 deletion trunk/arch/alpha/kernel/machvec_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,10 @@
#define CAT1(x,y) x##y
#define CAT(x,y) CAT1(x,y)

#define DO_DEFAULT_RTC .rtc_port = 0x70
#define DO_DEFAULT_RTC \
.rtc_port = 0x70, \
.rtc_get_time = common_get_rtc_time, \
.rtc_set_time = common_set_rtc_time

#define DO_EV4_MMU \
.max_asn = EV4_MAX_ASN, \
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/alpha/kernel/proto.h
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,8 @@ extern void smp_percpu_timer_interrupt(struct pt_regs *);
extern irqreturn_t timer_interrupt(int irq, void *dev);
extern void common_init_rtc(void);
extern unsigned long est_cycle_freq;
extern unsigned int common_get_rtc_time(struct rtc_time *time);
extern int common_set_rtc_time(struct rtc_time *time);

/* smc37c93x.c */
extern void SMC93x_Init(void);
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/alpha/kernel/sys_jensen.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,8 @@ struct alpha_machine_vector jensen_mv __initmv = {
.machine_check = jensen_machine_check,
.max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS,
.rtc_port = 0x170,
.rtc_get_time = common_get_rtc_time,
.rtc_set_time = common_set_rtc_time,

.nr_irqs = 16,
.device_interrupt = jensen_device_interrupt,
Expand Down
56 changes: 55 additions & 1 deletion trunk/arch/alpha/kernel/sys_marvel.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <asm/hwrpb.h>
#include <asm/tlbflush.h>
#include <asm/vga.h>
#include <asm/rtc.h>

#include "proto.h"
#include "err_impl.h"
Expand Down Expand Up @@ -426,6 +427,57 @@ marvel_init_rtc(void)
init_rtc_irq();
}

struct marvel_rtc_time {
struct rtc_time *time;
int retval;
};

#ifdef CONFIG_SMP
static void
smp_get_rtc_time(void *data)
{
struct marvel_rtc_time *mrt = data;
mrt->retval = __get_rtc_time(mrt->time);
}

static void
smp_set_rtc_time(void *data)
{
struct marvel_rtc_time *mrt = data;
mrt->retval = __set_rtc_time(mrt->time);
}
#endif

static unsigned int
marvel_get_rtc_time(struct rtc_time *time)
{
#ifdef CONFIG_SMP
struct marvel_rtc_time mrt;

if (smp_processor_id() != boot_cpuid) {
mrt.time = time;
smp_call_function_single(boot_cpuid, smp_get_rtc_time, &mrt, 1);
return mrt.retval;
}
#endif
return __get_rtc_time(time);
}

static int
marvel_set_rtc_time(struct rtc_time *time)
{
#ifdef CONFIG_SMP
struct marvel_rtc_time mrt;

if (smp_processor_id() != boot_cpuid) {
mrt.time = time;
smp_call_function_single(boot_cpuid, smp_set_rtc_time, &mrt, 1);
return mrt.retval;
}
#endif
return __set_rtc_time(time);
}

static void
marvel_smp_callin(void)
{
Expand Down Expand Up @@ -466,7 +518,9 @@ marvel_smp_callin(void)
struct alpha_machine_vector marvel_ev7_mv __initmv = {
.vector_name = "MARVEL/EV7",
DO_EV7_MMU,
DO_DEFAULT_RTC,
.rtc_port = 0x70,
.rtc_get_time = marvel_get_rtc_time,
.rtc_set_time = marvel_set_rtc_time,
DO_MARVEL_IO,
.machine_check = marvel_machine_check,
.max_isa_dma_address = ALPHA_MAX_ISA_DMA_ADDRESS,
Expand Down
10 changes: 10 additions & 0 deletions trunk/arch/alpha/kernel/time.c
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
#include <asm/io.h>
#include <asm/hwrpb.h>
#include <asm/8253pit.h>
#include <asm/rtc.h>

#include <linux/mc146818rtc.h>
#include <linux/time.h>
Expand Down Expand Up @@ -180,6 +181,15 @@ common_init_rtc(void)
init_rtc_irq();
}

unsigned int common_get_rtc_time(struct rtc_time *time)
{
return __get_rtc_time(time);
}

int common_set_rtc_time(struct rtc_time *time)
{
return __set_rtc_time(time);
}

/* Validate a computed cycle counter result against the known bounds for
the given processor core. There's too much brokenness in the way of
Expand Down
14 changes: 11 additions & 3 deletions trunk/include/asm-generic/rtc.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ static inline unsigned char rtc_is_updating(void)
return uip;
}

static inline unsigned int get_rtc_time(struct rtc_time *time)
static inline unsigned int __get_rtc_time(struct rtc_time *time)
{
unsigned char ctrl;
unsigned long flags;
Expand Down Expand Up @@ -108,8 +108,12 @@ static inline unsigned int get_rtc_time(struct rtc_time *time)
return RTC_24H;
}

#ifndef get_rtc_time
#define get_rtc_time __get_rtc_time
#endif

/* Set the current date and time in the real time clock. */
static inline int set_rtc_time(struct rtc_time *time)
static inline int __set_rtc_time(struct rtc_time *time)
{
unsigned long flags;
unsigned char mon, day, hrs, min, sec;
Expand Down Expand Up @@ -190,11 +194,15 @@ static inline int set_rtc_time(struct rtc_time *time)
return 0;
}

#ifndef set_rtc_time
#define set_rtc_time __set_rtc_time
#endif

static inline unsigned int get_rtc_ss(void)
{
struct rtc_time h;

get_rtc_time(&h);
__get_rtc_time(&h);
return h.tm_sec;
}

Expand Down

0 comments on commit 82759fa

Please sign in to comment.