Subject: Re: TODR changes for mac68k
To: Garrett D'Amore <garrett_damore@tadpole.com>
From: Garrett D'Amore <garrett_damore@tadpole.com>
List: port-mac68k
Date: 09/16/2006 19:09:01
The patch was for mac68k not macppc.  I am sorry.  I guess I've gotten
confused by the 30 or 40 odd ports I've hacked on lately... :-)

Garrett D'Amore wrote:
> Attached find an MI todr patch for macppc.  It isn't tested.  Note that
> the rtc_offset handling is now part of the MI code, so the MD driver
> doesn't have to worry about it.
>
>   
> ------------------------------------------------------------------------
>
> Index: sys/arch/mac68k/include/types.h
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/mac68k/include/types.h,v
> retrieving revision 1.14
> diff -d -p -u -r1.14 types.h
> --- sys/arch/mac68k/include/types.h	11 Dec 2005 12:18:03 -0000	1.14
> +++ sys/arch/mac68k/include/types.h	16 Sep 2006 05:59:05 -0000
> @@ -5,4 +5,6 @@
>  
>  #include <m68k/types.h>
>  
> +#define	__HAVE_GENERIC_TODR
> +
>  #endif /* _TYPES_MACHINE_ */
> Index: sys/arch/mac68k/mac68k/clock.c
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/mac68k/mac68k/clock.c,v
> retrieving revision 1.44
> diff -d -p -u -r1.44 clock.c
> --- sys/arch/mac68k/mac68k/clock.c	11 Dec 2005 12:18:03 -0000	1.44
> +++ sys/arch/mac68k/mac68k/clock.c	16 Sep 2006 05:59:05 -0000
> @@ -116,6 +116,8 @@ __KERNEL_RCSID(0, "$NetBSD: clock.c,v 1.
>  #include <sys/proc.h>
>  #include <sys/systm.h>
>  
> +#include <dev/clock_subr.h>
> +
>  #include <machine/autoconf.h>
>  #include <machine/psl.h>
>  #include <machine/cpu.h>
> @@ -134,6 +136,8 @@ int	clock_debug = 0;
>  #endif
>  
>  void	rtclock_intr(void);
> +static int mac68k_gettime(todr_chip_handle_t, volatile struct timeval *);
> +static int mac68k_settime(todr_chip_handle_t, volatile struct timeval *);
>  
>  #define	DIFF19041970	2082844800
>  #define	DIFF19701990	630720000
> @@ -181,7 +185,13 @@ enablertclock(void)
>  void
>  cpu_initclocks(void)
>  {
> +	static struct todr_chip_handle todr = {
> +		.todr_settime = mac68k_settime,
> +		.todr_gettime = mac68k_gettime,
> +	};
> +	
>  	enablertclock();
> +	todr_attach(&todr);
>  }
>  
>  void
> @@ -332,7 +342,7 @@ ugmt_2_pramt(u_long t)
>  	/* don't know how to open a file properly. */
>  	/* assume compiled timezone is correct. */
>  
> -	return (t = t + DIFF19041970 - 60 * rtc_offset);
> +	return (t = t + DIFF19041970);
>  }
>  
>  /*
> @@ -342,7 +352,7 @@ ugmt_2_pramt(u_long t)
>  static u_long
>  pramt_2_ugmt(u_long t)
>  {
> -	return (t = t - DIFF19041970 + 60 * rtc_offset);
> +	return (t = t - DIFF19041970);
>  }
>  
>  /*
> @@ -367,65 +377,29 @@ int	mac68k_trust_pram = 1;
>   * Set global GMT time register, using a file system time base for comparison
>   * and sanity checking.
>   */
> -void
> -inittodr(time_t base)
> +int
> +mac68k_gettime(todr_chip_handle_t tch, volatile struct timeval *tvp)
>  {
>  	u_long timbuf;
>  
>  	timbuf = pramt_2_ugmt(pram_readtime());
> -	if ((timbuf - (macos_boottime + 60 * rtc_offset)) > 10 * 60) {
> +	if ((timbuf - macos_boottime) > 10 * 60) {
>  #if DIAGNOSTIC
>  		printf(
>  		    "PRAM time does not appear to have been read correctly.\n");
>  		printf("PRAM: 0x%lx, macos_boottime: 0x%lx.\n",
> -		    timbuf, macos_boottime + 60 * rtc_offset);
> +		    timbuf, macos_boottime);
>  #endif
>  		timbuf = macos_boottime;
>  		mac68k_trust_pram = 0;
>  	}
> -#ifdef DIAGNOSTIC
> -	else
> -		printf("PRAM: 0x%lx, macos_boottime: 0x%lx.\n",
> -		    timbuf, macos_boottime);
> -#endif
> -
> -	/*
> -	 * GMT bias is passed in from Booter
> -	 * To get GMT, *subtract* GMTBIAS from *our* time
> -	 * (gmtbias is in minutes, mult by 60)
> -	 */
> -	timbuf -= macos_gmtbias * 60;
> -
> -	if (base < 5 * SECYR) {
> -		printf("WARNING: file system time earlier than 1975\n");
> -		printf(" -- CHECK AND RESET THE DATE!\n");
> -		base = 21 * SECYR;	/* 1991 is our sane date */
> -	}
> -	/*
> -	 * Check sanity against the year 2010.  Let's hope NetBSD/mac68k
> -	 * doesn't run that long!
> -	 */
> -	if (base > 40 * SECYR) {
> -		printf("WARNING: file system time later than 2010\n");
> -		printf(" -- CHECK AND RESET THE DATE!\n");
> -		base = 21 * SECYR;	/* 1991 is our sane date */
> -	}
> -	if (timbuf < base) {
> -		printf(
> -		    "WARNING: Battery clock has earlier time than UNIX fs.\n");
> -		if (((u_long) base) < (40 * SECYR))
> -			timbuf = base;
> -	}
> -	time.tv_sec = timbuf;
> -	time.tv_usec = 0;
> +	tvp->tv_sec = timbuf;
> +	tvp->tv_usec = 0;
> +	return 0;
>  }
>  
> -/*
> - * Set battery backed clock to a new time, presumably after someone has
> - * changed system time.
> - */
> -void
> -resettodr(void)
> +int
> +mac68k_settime(todr_chip_handle_t tch, volatile struct timeval *tvp)
>  {
>  	if (mac68k_trust_pram)
>  		/*
> @@ -439,9 +413,9 @@ resettodr(void)
>  		printf("NetBSD/mac68k does not trust itself to try and write "
>  		    "to the PRAM on this system.\n");
>  #endif
> +	return 0;
>  }
>  
> -
>  /*
>   * The Macintosh timers decrement once every 1.2766 microseconds.
>   * MGFH2, p. 180
> Index: sys/arch/mac68k/mac68k/clockreg.h
> ===================================================================
> RCS file: /cvsroot/src/sys/arch/mac68k/mac68k/clockreg.h,v
> retrieving revision 1.6
> diff -d -p -u -r1.6 clockreg.h
> --- sys/arch/mac68k/mac68k/clockreg.h	5 Jun 2001 05:19:16 -0000	1.6
> +++ sys/arch/mac68k/mac68k/clockreg.h	16 Sep 2006 05:59:05 -0000
> @@ -62,5 +62,3 @@
>  #if !defined(PRF_INTERVAL)
>  #define PRF_INTERVAL CLK_INTERVAL
>  #endif
> -
> -#define SECYR 31536000
>   


-- 
Garrett D'Amore, Principal Software Engineer
Tadpole Computer / Computing Technologies Division,
General Dynamics C4 Systems
http://www.tadpolecomputer.com/
Phone: 951 325-2134  Fax: 951 325-2191