From: Finn Thain <fthain@telegraphics.com.au>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Linux/m68k <linux-m68k@vger.kernel.org>,
"linuxppc-dev@lists.ozlabs.org" <linuxppc-dev@lists.ozlabs.org>,
"linux-api@vger.kernel.org" <linux-api@vger.kernel.org>
Subject: Re: [RFC v2 23/24] m68k/mac: Fix PRAM accessors
Date: Tue, 16 Jun 2015 13:10:29 +1000 (AEST) [thread overview]
Message-ID: <alpine.LNX.2.00.1506152213340.12762@nippy.intranet> (raw)
In-Reply-To: <CAMuHMdWzKvWjAE3u54E4xewEDX+zJqEDEvRmO2twpeD2vmBzog@mail.gmail.com>
On Mon, 15 Jun 2015, Geert Uytterhoeven wrote:
> Hi Finn,
>
> On Sun, Jun 14, 2015 at 9:46 AM, Finn Thain <fthain@telegraphics.com.au> wrote:
> > --- linux.orig/arch/m68k/mac/misc.c 2015-06-14 17:46:02.000000000 +1000
> > +++ linux/arch/m68k/mac/misc.c 2015-06-14 17:46:03.000000000 +1000
> > @@ -284,11 +287,31 @@ static void via_pram_command(int command
> >
> > static unsigned char via_pram_read_byte(int offset)
> > {
> > - return 0;
> > + unsigned char temp;
> > + int addr = ((offset & 0xE0) << 3) | ((offset & 0x1F) << 2);
>
> Can you please add #defines for the magic values?
This is just marshalling the offset argument. I don't know how to rewrite
that code more clearly. I'm open to suggestions. I don't know of any
documentation that gives names or meanings to the different bit ranges. I
infered the format from the MESS source code,
https://github.com/mamedev/mame/blob/master/src/mess/machine/macrtc.c
What I found in the MESS source code looks like the result of reverse
engineering. Hence the RTC code in this patch also looks like a reverse
engineered driver.
>
> > +
> > + /* Use RTC command 0x38 for XPRAM access, as per MESS source code */
> > + via_pram_command(addr | 0x3800 | 0x8001, &temp);
>
> It seems 0x38 is already documented in <linux/pmu.h> (see below), or not
> (it's shifted left by 8 bits?)?
No, this is a RTC command not a PMU command. This RTC device is an Apple
custom IC that is publicly undocumented. OTOH, the PMU device is well
documented, since Apple publicly released PMU driver source code in
MkLinux and later in XNU. That's why I've been able to provide #defines
for the PMU commands but not the RTC commands.
>
> > +
> > + return temp;
> > }
> >
> > static void via_pram_write_byte(unsigned char data, int offset)
> > {
> > + unsigned char temp;
> > + int addr = ((offset & 0xE0) << 3) | ((offset & 0x1F) << 2);
> > +
> > + /* Clear the write protect bit */
> > + temp = 0x55;
> > + via_pram_command(0x34 | 0x01, &temp);
> > +
> > + /* Write the byte to XPRAM */
> > + temp = data;
> > + via_pram_command(0x3800 | 0x0001 | addr, &temp);
> > +
> > + /* Set the write protect bit */
> > + temp = 0xD5;
> > + via_pram_command(0x34 | 0x01, &temp);
>
> More magic values...
When I have reliable documentation I always define macros. So I agree that
"command" bytes like 0x34 and 0x3800 should have names but what are the
correct names? Are we constructing an opcode containing RTC register file
addresses or are we issuing read/write accesses to chip registers?
In my experience with undocumented 68k Mac hardware and its Linux port,
codified guesswork is worse than no documentation at all. The only useful
RTC documentation I've ever come across is this:
http://mac.linux-m68k.org/devel/plushw.php
It tells us that the two least significant bits bits must equal 0b01. What
would you call that macro? It also tells us that the most significant bit,
0x80, means "read access" but it only mentions early RTC chips and so it
does not cover two byte opcodes. Should I have used 0x8080 here?
Whatever your opinion of reverse engineered drivers, the changes in this
patch are consistent with the rest of the file. E.g. via_read_time() and
via_write_time(). If/when we have the chip data needed to correctly define
macros for 0x01, 0x0001, 0x80, 0x8000 or 0x8080, I think they should be
applied across the entire file, and in a different patch. Inconsistent use
of such macros would be undesirable IMHO.
>
> > }
> >
> > /*
> > Index: linux/include/uapi/linux/pmu.h
> > ===================================================================
> > --- linux.orig/include/uapi/linux/pmu.h 2015-06-14 17:45:34.000000000 +1000
> > +++ linux/include/uapi/linux/pmu.h 2015-06-14 17:46:03.000000000 +1000
> > @@ -18,7 +18,9 @@
> > #define PMU_POWER_CTRL 0x11 /* control power of some devices */
> > #define PMU_ADB_CMD 0x20 /* send ADB packet */
> > #define PMU_ADB_POLL_OFF 0x21 /* disable ADB auto-poll */
> > +#define PMU_WRITE_XPRAM 0x32 /* write eXtended Parameter RAM */
> > #define PMU_WRITE_NVRAM 0x33 /* write non-volatile RAM */
> > +#define PMU_READ_XPRAM 0x3a /* read eXtended Parameter RAM */
> > #define PMU_READ_NVRAM 0x3b /* read non-volatile RAM */
> > #define PMU_SET_RTC 0x30 /* set real-time clock */
> > #define PMU_READ_RTC 0x38 /* read real-time clock */
>
> Gr{oetje,eeting}s,
>
> Geert
>
--
next prev parent reply other threads:[~2015-06-16 3:10 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-14 7:46 [RFC v2 00/24] Re-use nvram module Finn Thain
2015-06-14 7:46 ` [RFC v2 01/24] macintosh/nvram: Remove as unused Finn Thain
2015-06-15 6:41 ` [RFC,v2,01/24] " Michael Ellerman
2015-06-14 7:46 ` [RFC v2 02/24] scsi/atari_scsi: Dont select CONFIG_NVRAM Finn Thain
2015-06-14 7:46 ` [RFC v2 03/24] m68k/atari: Move Atari-specific code out of drivers/char/nvram.c Finn Thain
2015-06-14 7:46 ` [RFC v2 04/24] m68k/atari: Replace nvram_{read,write}_byte with arch_nvram_ops Finn Thain
2015-06-14 7:46 ` [RFC v2 05/24] char/nvram: Re-order functions to remove forward declarations and #ifdefs Finn Thain
2015-06-14 7:46 ` [RFC v2 06/24] char/nvram: Adopt arch_nvram_ops Finn Thain
2015-06-14 7:46 ` [RFC v2 07/24] x86/thinkpad_acpi: Use arch_nvram_ops methods instead of nvram_read_byte() and nvram_write_byte() Finn Thain
2015-06-14 7:46 ` [RFC v2 08/24] char/nvram: Allow the set_checksum and initialize ioctls to be omitted Finn Thain
2015-06-14 7:46 ` [RFC v2 09/24] char/nvram: Implement NVRAM read/write methods Finn Thain
2015-06-14 7:46 ` [RFC v2 10/24] char/nvram: Use generic fixed_size_llseek() Finn Thain
2015-06-14 7:46 ` [RFC v2 11/24] m68k/atari: Implement arch_nvram_ops methods and enable CONFIG_HAVE_ARCH_NVRAM_OPS Finn Thain
2015-06-14 7:46 ` [RFC v2 12/24] char/nvram: Add "devname:nvram" module alias Finn Thain
2015-06-14 7:46 ` [RFC v2 13/24] powerpc: Cleanup nvram includes Finn Thain
2015-06-14 7:46 ` [RFC v2 14/24] powerpc: Add missing ppc_md.nvram_size for CHRP and PowerMac Finn Thain
2015-06-14 7:46 ` [RFC v2 15/24] powerpc: Implement arch_nvram_ops.get_size() and remove old nvram_* exports Finn Thain
2015-06-14 7:46 ` [RFC v2 16/24] powerpc: Implement nvram sync ioctl Finn Thain
2015-06-14 7:46 ` [RFC v2 17/24] powerpc, fbdev: Use arch_nvram_ops methods instead of nvram_read_byte() and nvram_write_byte() Finn Thain
2015-06-14 7:46 ` [RFC v2 18/24] nvram: Drop nvram_* symbol exports and prototypes Finn Thain
2015-06-14 7:46 ` [RFC v2 19/24] powerpc: Remove CONFIG_GENERIC_NVRAM and adopt CONFIG_HAVE_ARCH_NVRAM_OPS Finn Thain
2015-06-14 7:46 ` [RFC v2 20/24] char/generic_nvram: Remove as unused Finn Thain
2015-06-14 7:46 ` [RFC v2 21/24] powerpc: Adopt nvram module for PPC64 Finn Thain
2015-06-14 7:46 ` [RFC v2 22/24] m68k/mac: Adopt naming and calling conventions for PRAM routines Finn Thain
2015-06-14 7:46 ` [RFC v2 23/24] m68k/mac: Fix PRAM accessors Finn Thain
2015-06-15 8:23 ` Geert Uytterhoeven
2015-06-16 3:10 ` Finn Thain [this message]
2015-06-18 4:49 ` Finn Thain
2015-06-18 6:59 ` Geert Uytterhoeven
2015-06-18 16:52 ` Andreas Schwab
2015-06-14 7:46 ` [RFC v2 24/24] m68k: Dispatch nvram_ops calls to Atari or Mac functions 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=alpine.LNX.2.00.1506152213340.12762@nippy.intranet \
--to=fthain@telegraphics.com.au \
--cc=geert@linux-m68k.org \
--cc=linux-api@vger.kernel.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
all inboxes | Powered by JetHome®