Become a MacRumors Supporter for $50/year with no ads, ability to filter front page stories, and private forums.
Status
The first post of this thread is a WikiPost and can be edited by anyone with the appropiate permissions. Your edits will be public.
I have an issue with my PowerMac G4 Sawtooth hanging while attempting to read XPRAM for the timezone. It says GMT Delta read XPRAM and just... hangs. I don't think Adelie Linux knows how to read the XPRAM to get what time it is and can't boot without that information. I have noticed though that open firmware is able to get the system time without issue. Is there a way to force Adelie to get the time from the firmware instead of memory it can't read?
 
Last edited:
I have an issue with my PowerMac G4 Sawtooth hanging while attempting to read XPRAM for the timezone. It says GMT Delta read XPRAM and just... hangs. I don't think Adelie Linux knows how to read the XPRAM to get what time it is and can't boot without that information. I have noticed though that open firmware is able to get the system time without issue. Is there a way to force Adelie to get the time from the firmware instead of memory it can't read?

Please edit your post so that it doesn't contain all of the first post.

This is a question about Linux. Not Open Firmware.

There is no reason why Linux cannot read XPRAM. Therefore, this is a minor bug that should be fixable. XPRAM is part of NVRAM on Power Macs.
Some XPRAM notes at:
https://68kmla.org/bb/threads/skipping-the-startup-memory-test.50699/post-570896
https://68kmla.org/bb/threads/read-write-pram-and-xpram.47196/

What is the exact message you are seeing?

Linux source code has this function in time.c:
Code:
long __init pmac_time_init(void)
{
	s32 delta = 0;
#if defined(CONFIG_NVRAM) && defined(CONFIG_PPC32)
	int dst;
	
	delta = ((s32)pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0x9)) << 16;
	delta |= ((s32)pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0xa)) << 8;
	delta |= pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0xb);
	if (delta & 0x00800000UL)
		delta |= 0xFF000000UL;
	dst = ((pmac_xpram_read(PMAC_XPRAM_MACHINE_LOC + 0x8) & 0x80) != 0);
	printk("GMT Delta read from XPRAM: %d minutes, DST: %s\n", delta/60,
		dst ? "on" : "off");
#endif
	return delta;
}

nvram.h in the Linux source code describes the info at PMAC_XPRAM_MACHINE_LOC:
Code:
/* PowerMac specific nvram stuffs */

enum {
	pmac_nvram_OF,		/* Open Firmware partition */
	pmac_nvram_XPRAM,	/* MacOS XPRAM partition */
	pmac_nvram_NR		/* MacOS Name Registry partition */
};


/* Some offsets in XPRAM */
#define PMAC_XPRAM_MACHINE_LOC	0xe4
#define PMAC_XPRAM_SOUND_VOLUME	0x08

/* Machine location structure in PowerMac XPRAM */
struct pmac_machine_location {
	unsigned int	latitude;	/* 2+30 bit Fractional number */
	unsigned int	longitude;	/* 2+30 bit Fractional number */
	unsigned int	delta;		/* mix of GMT delta and DLS */
};


It looks like the pmac_time_init function has read the XPRAM before it outputs the "GMT Delta read from XPRAM" message which means it must be crashing after that.
 
I've tried maxcpus=1 to avoid endlessly searching for other CPUs and I've tried nosmp to disable symmetric multi processing altogether. I've made progress past this hang so your theory seems correct.

However using Maxcpus=1 in grub arguments before boot leaves it hanging trying to set struct sizes. Using nosmp command before boot from Grub produces a different result where it hangs trying to use MPIC instead after getting past struct sizes. RCU is doing something.

I've also tried nomodeset to keep the GPU from wasting time loading its driver but that didn't help at all.

As things are I can't boot Adelie from CD which is a problem because I wanted to use Parted from the TTY command line to partion my hard drive and shove Mac OS X Tiger aside to make room for both Adelie and Sorbet Leopard.

My next step is reconnecting the power to the CF card reader and flashing Adelie directly to the CF card using dd. If booting the PowerMac with that OS Card doesn't work I'm cooked. I'm hoping that all thats happening is that the Pioneer DVD-ROM drive is too slow at its max 2x speed.

I've replaced the PRAM battery, reset the PMU and zapped PRAM three times before this so its not that.
 
I've tried maxcpus=1 to avoid endlessly searching for other CPUs and I've tried nosmp to disable symmetric multi processing altogether. I've made progress past this hang so your theory seems correct.

However using Maxcpus=1 in grub arguments before boot leaves it hanging trying to set struct sizes. Using nosmp command before boot from Grub produces a different result where it hangs trying to use MPIC instead after getting past struct sizes. RCU is doing something.

I've also tried nomodeset to keep the GPU from wasting time loading its driver but that didn't help at all.

As things are I can't boot Adelie from CD which is a problem because I wanted to use Parted from the TTY command line to partion my hard drive and shove Mac OS X Tiger aside to make room for both Adelie and Sorbet Leopard.

My next step is reconnecting the power to the CF card reader and flashing Adelie directly to the CF card using dd. If booting the PowerMac with that OS Card doesn't work I'm cooked. I'm hoping that all thats happening is that the Pioneer DVD-ROM drive is too slow at its max 2x speed.

I've replaced the PRAM battery, reset the PMU and zapped PRAM three times before this so its not that.
I've also reset the NVRAM from the Open Firmware interface. I thought maybe LeopardAssist had modified the information needed to boot.
 
Register on MacRumors! This sidebar will go away, and you'll see fewer ads.