linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Finn Thain <fthain@telegraphics.com.au>
To: <linux-kernel@vger.kernel.org>, <linux-m68k@vger.kernel.org>,
	<linuxppc-dev@lists.ozlabs.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>
Subject: [RFC v4 23/25] m68k/mac: Use macros for RTC accesses not magic numbers
Date: Sun, 12 Jul 2015 20:25:50 +1000	[thread overview]
Message-ID: <20150712102532.945909028@telegraphics.com.au> (raw)
In-Reply-To: 20150712102527.356151908@telegraphics.com.au

[-- Attachment #1: mac68k-rtc-macros --]
[-- Type: text/plain, Size: 4675 bytes --]

Signed-off-by: Finn Thain <fthain@telegraphics.com.au>

---

This is intended to improve code style and not affect code behaviour.
I've tested this on a Quadra 650.

I don't know the meanings of the 4 undocumented write protect register
bits 0x55, so I decided against defining 4 macros for those bits.

---
 arch/m68k/mac/misc.c |   59 +++++++++++++++++++++++++++++++++++----------------
 1 file changed, 41 insertions(+), 18 deletions(-)

Index: linux/arch/m68k/mac/misc.c
===================================================================
--- linux.orig/arch/m68k/mac/misc.c	2015-07-12 20:25:20.000000000 +1000
+++ linux/arch/m68k/mac/misc.c	2015-07-12 20:25:22.000000000 +1000
@@ -242,6 +242,21 @@ static void via_rtc_send(__u8 data)
 }
 
 /*
+ * These values can be found in Inside Macintosh vol. III ch. 2
+ * which has a description of the RTC chip in the original Mac.
+ */
+
+#define RTC_FLG_READ            BIT(7)
+#define RTC_FLG_WRITE_PROTECT   BIT(7)
+#define RTC_CMD_READ(r)         (RTC_FLG_READ | (r << 2))
+#define RTC_CMD_WRITE(r)        (r << 2)
+#define RTC_REG_SECONDS_0       0
+#define RTC_REG_SECONDS_1       1
+#define RTC_REG_SECONDS_2       2
+#define RTC_REG_SECONDS_3       3
+#define RTC_REG_WRITE_PROTECT   13
+
+/*
  * Execute a VIA PRAM/RTC command. For read commands
  * data should point to a one-byte buffer for the
  * resulting data. For write commands it should point
@@ -250,13 +265,17 @@ static void via_rtc_send(__u8 data)
  * This function disables all interrupts while running.
  */
 
-static void via_pram_command(int command, __u8 *data)
+static void via_rtc_command(int command, __u8 *data)
 {
 	unsigned long flags;
 	int	is_read;
 
 	local_irq_save(flags);
 
+	/* The least significant bits must be 0b01 according to Inside Mac */
+
+	command = (command & ~3) | 1;
+
 	/* Enable the RTC and make sure the strobe line is high */
 
 	via1[vBufB] = (via1[vBufB] | VIA1B_vRTCClk) & ~VIA1B_vRTCEnb;
@@ -264,10 +283,10 @@ static void via_pram_command(int command
 	if (command & 0xFF00) {		/* extended (two-byte) command */
 		via_rtc_send((command & 0xFF00) >> 8);
 		via_rtc_send(command & 0xFF);
-		is_read = command & 0x8000;
+		is_read = command & (RTC_FLG_READ << 8);
 	} else {			/* one-byte command */
 		via_rtc_send(command);
-		is_read = command & 0x80;
+		is_read = command & RTC_FLG_READ;
 	}
 	if (is_read) {
 		*data = via_rtc_recv();
@@ -306,10 +325,10 @@ static long via_read_time(void)
 	} result, last_result;
 	int count = 1;
 
-	via_pram_command(0x81, &last_result.cdata[3]);
-	via_pram_command(0x85, &last_result.cdata[2]);
-	via_pram_command(0x89, &last_result.cdata[1]);
-	via_pram_command(0x8D, &last_result.cdata[0]);
+	via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_0), &last_result.cdata[3]);
+	via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_1), &last_result.cdata[2]);
+	via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_2), &last_result.cdata[1]);
+	via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_3), &last_result.cdata[0]);
 
 	/*
 	 * The NetBSD guys say to loop until you get the same reading
@@ -317,10 +336,14 @@ static long via_read_time(void)
 	 */
 
 	while (1) {
-		via_pram_command(0x81, &result.cdata[3]);
-		via_pram_command(0x85, &result.cdata[2]);
-		via_pram_command(0x89, &result.cdata[1]);
-		via_pram_command(0x8D, &result.cdata[0]);
+		via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_0),
+		                &result.cdata[3]);
+		via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_1),
+		                &result.cdata[2]);
+		via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_2),
+		                &result.cdata[1]);
+		via_rtc_command(RTC_CMD_READ(RTC_REG_SECONDS_3),
+		                &result.cdata[0]);
 
 		if (result.idata == last_result.idata)
 			return result.idata - RTC_OFFSET;
@@ -356,18 +379,18 @@ static void via_write_time(long time)
 	/* Clear the write protect bit */
 
 	temp = 0x55;
-	via_pram_command(0x35, &temp);
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_WRITE_PROTECT), &temp);
 
 	data.idata = time + RTC_OFFSET;
-	via_pram_command(0x01, &data.cdata[3]);
-	via_pram_command(0x05, &data.cdata[2]);
-	via_pram_command(0x09, &data.cdata[1]);
-	via_pram_command(0x0D, &data.cdata[0]);
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_SECONDS_0), &data.cdata[3]);
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_SECONDS_1), &data.cdata[2]);
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_SECONDS_2), &data.cdata[1]);
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_SECONDS_3), &data.cdata[0]);
 
 	/* Set the write protect bit */
 
-	temp = 0xD5;
-	via_pram_command(0x35, &temp);
+	temp = 0x55 | RTC_FLG_WRITE_PROTECT;
+	via_rtc_command(RTC_CMD_WRITE(RTC_REG_WRITE_PROTECT), &temp);
 }
 
 static void via_shutdown(void)



  parent reply	other threads:[~2015-07-12 10:42 UTC|newest]

Thread overview: 55+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-07-12 10:25 [RFC v4 00/25] Re-use nvram module Finn Thain
2015-07-12 10:25 ` [RFC v4 01/25] scsi/atari_scsi: Dont select CONFIG_NVRAM Finn Thain
2015-07-12 10:25 ` [RFC v4 02/25] char/nvram: Use bitwise OR to obtain Atari video mode data Finn Thain
2015-07-12 10:25 ` [RFC v4 03/25] m68k/atari: Move Atari-specific code out of drivers/char/nvram.c Finn Thain
2015-07-13 18:13   ` Andreas Schwab
2015-07-14  8:17     ` Finn Thain
2015-07-14  8:23       ` Geert Uytterhoeven
2015-07-14  8:33         ` Andreas Schwab
2015-07-22  3:52       ` Michael Schmitz
2015-07-22  4:22         ` Finn Thain
2015-07-22 14:32           ` Christian T. Steigies
2015-07-22 23:46             ` Michael Schmitz
2015-07-23  0:49               ` Finn Thain
2015-07-23  9:21           ` Christian T. Steigies
2015-07-24  2:56             ` Michael Schmitz
2015-07-24 19:07               ` Christian T. Steigies
2015-07-25  0:35                 ` Finn Thain
2015-07-25  1:00                   ` Michael Ellerman
2015-07-25  7:38                     ` Finn Thain
2015-07-26  1:37                     ` Finn Thain
2015-07-25  0:51                 ` Michael Schmitz
2015-07-25  7:27                   ` Finn Thain
2015-07-26  1:02                     ` Michael Schmitz
2015-07-26  1:19                       ` Finn Thain
2015-07-27  2:23                         ` Michael Schmitz
2015-07-27  5:51                           ` Finn Thain
2015-07-12 10:25 ` [RFC v4 04/25] m68k/atari: Replace nvram_{read,write}_byte with arch_nvram_ops Finn Thain
2015-07-12 10:25 ` [RFC v4 05/25] char/nvram: Re-order functions to remove forward declarations and #ifdefs Finn Thain
2015-07-12 10:25 ` [RFC v4 06/25] char/nvram: Adopt arch_nvram_ops Finn Thain
2015-07-12 10:25 ` [RFC v4 07/25] x86/thinkpad_acpi: Use arch_nvram_ops methods instead of nvram_read_byte() and nvram_write_byte() Finn Thain
2015-07-12 10:25 ` [RFC v4 08/25] char/nvram: Allow the set_checksum and initialize ioctls to be omitted Finn Thain
2015-07-12 10:25 ` [RFC v4 09/25] char/nvram: Implement NVRAM read/write methods Finn Thain
2015-07-12 10:25 ` [RFC v4 10/25] char/nvram: Use generic fixed_size_llseek() Finn Thain
2015-07-12 10:25 ` [RFC v4 11/25] m68k/atari: Implement arch_nvram_ops methods and enable CONFIG_HAVE_ARCH_NVRAM_OPS Finn Thain
2015-07-12 10:25 ` [RFC v4 12/25] char/nvram: Add "devname:nvram" module alias Finn Thain
2015-07-12 10:25 ` [RFC v4 13/25] powerpc: Cleanup nvram includes Finn Thain
2015-07-12 10:25 ` [RFC v4 14/25] powerpc: Add missing ppc_md.nvram_size for CHRP and PowerMac Finn Thain
2015-07-12 10:25 ` [RFC v4 15/25] powerpc: Implement arch_nvram_ops.get_size() and remove old nvram_* exports Finn Thain
2015-07-12 10:25 ` [RFC v4 16/25] powerpc: Implement nvram sync ioctl Finn Thain
2015-07-12 10:25 ` [RFC v4 17/25] powerpc, fbdev: Use arch_nvram_ops methods instead of nvram_read_byte() and nvram_write_byte() Finn Thain
2015-07-14  7:58   ` Finn Thain
2015-07-14 11:52     ` Benjamin Herrenschmidt
2015-07-15  5:21       ` Finn Thain
2015-07-16  6:01         ` Finn Thain
2015-09-18  8:17           ` Finn Thain
2015-07-12 10:25 ` [RFC v4 18/25] nvram: Drop nvram_* symbol exports and prototypes Finn Thain
2015-07-12 10:25 ` [RFC v4 19/25] powerpc: Remove CONFIG_GENERIC_NVRAM and adopt CONFIG_HAVE_ARCH_NVRAM_OPS Finn Thain
2015-07-12 10:25 ` [RFC v4 20/25] char/generic_nvram: Remove as unused Finn Thain
2015-07-12 10:25 ` [RFC v4 21/25] powerpc: Adopt nvram module for PPC64 Finn Thain
2015-07-12 10:25 ` [RFC v4 22/25] m68k/mac: Adopt naming and calling conventions for PRAM routines Finn Thain
2015-07-12 10:25 ` Finn Thain [this message]
2015-07-12 10:25 ` [RFC v4 24/25] m68k/mac: Fix PRAM accessors Finn Thain
2015-07-12 10:25 ` [RFC v4 25/25] m68k: Dispatch nvram_ops calls to Atari or Mac functions Finn Thain
2015-07-13  7:55 ` [RFC v4 00/25] Re-use nvram module Geert Uytterhoeven
2015-07-14  7:57   ` Finn Thain

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150712102532.945909028@telegraphics.com.au \
    --to=fthain@telegraphics.com.au \
    --cc=geert@linux-m68k.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-m68k@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).