* Re: v2.6.13.4 : Bad page state at prep_new_page when booting with quik
From: Marc Zyngier @ 2005-10-22 8:44 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1129934528.7919.15.camel@gaston>
>>>>> "BenH" == Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
BenH> Hrm... another thing you can do is have a look at the
BenH> init_bandit() routine. It does:
[...]
BenH> What is the value of "magic" in both cases ?
It says 0x17 in both case...
BenH> As for the rest, well, printing out the various addresses where
BenH> the kernel is copied and/or decompresses itself may help...
Will try that next. I also started diving into quik sources...
One more data point : kernel loaded with quik works just fine on a
7500 with a 604e@200 CPU. So it looks like it is some particular
firmware/hardware combinaison that triggers this failure mode.
BenH> Have you tried also netbooting directly vmlinux.coff ? (boot
BenH> enet: might work on OldWorld OF, you'll need a bootp server)
BenH> That works with some oldworlds, not all, depends if they have a
BenH> working ethernet driver in OF.
Nope. The poor thing doesn't even have an integrated ethernet to start
with (nor its official Apple counterpart)...
Stay tuned ;-)
M.
--
And if you don't know where you're going, any road will take you there...
^ permalink raw reply
* Re: CHRP specifications
From: i2a @ 2005-10-22 13:22 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <20051021051844.GA12653@localhost.localdomain>
On Fri, 21 Oct 2005 07:18:45 +0200, Sven Luther wrote
> On Thu, Oct 20, 2005 at 06:33:18PM -0500, Hollis Blanchard wrote:
> > On Oct 20, 2005, at 10:17 AM, Sven Luther wrote:
> > >
> > >BTW, anyone know of where to get the CHRP specs in downloadable html
> > >or pdf or
> > >something format. Not the chrp OF bindings, but the real CHRP specs ?
> >
> > I believe you've seen this before, but the link is still in the same
> > place... http://penguinppc.org/otherhw/#chrp
>
> ah, yes, remember now, i even already downloaded it :)
>
> > As I recall, though, the CHRP specification mandates such obsolete
> > features as an ADB controller, so claiming "CHRP compliance" may not be
> > all that special these days. :)
>
> still good for the other features and for documentation.
I got pointers to this document, in case you do not have it already (it's old
but at least something)..
http://simonraven.nuit.ca/docs/pdf/MacTech.pdf
Ingmar
^ permalink raw reply
* [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-22 13:54 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
Hello,
Here is the updated patch. Please test.
What this patch actually does:
- Make CONFIG_PHYS_64BIT selectable for the 6xx family
- Make the BATs use 36-Bit addressing and use large BATs
when available on the processor.
- Make use of the 4 additional BATs on some processors.
Changes to the old patch:
- Removed all additional configuration options
- Merged LARGE_BATS with PHYS_64BIT because there seems to be no processor
supporting only one of these features (I am not sure about the e500v2,
but maybe somebody else is sure)
Rupert
diff -urN linux-2.6.13.3.orig/arch/ppc/Kconfig linux-2.6.13.3/arch/ppc/Kconfig
--- linux-2.6.13.3.orig/arch/ppc/Kconfig Fri Oct 21 05:42:59 2005
+++ linux-2.6.13.3/arch/ppc/Kconfig Fri Oct 21 21:05:09 2005
@@ -115,8 +115,8 @@
default y if E500 && PHYS_64BIT
config PHYS_64BIT
- bool 'Large physical address support' if E500
- depends on 44x || E500
+ bool 'Large physical address support' if E500 || 6xx
+ depends on 44x || E500 || 6xx
default y if 44x
---help---
This option enables kernel support for larger than 32-bit physical
diff -urN linux-2.6.13.3.orig/arch/ppc/kernel/cpu_setup_6xx.S linux-2.6.13.3/arch/ppc/kernel/cpu_setup_6xx.S
--- linux-2.6.13.3.orig/arch/ppc/kernel/cpu_setup_6xx.S Fri Oct 21 05:49:53 2005
+++ linux-2.6.13.3/arch/ppc/kernel/cpu_setup_6xx.S Fri Oct 21 21:07:06 2005
@@ -228,14 +228,18 @@
/* All of the bits we have to set.....
*/
ori r11,r11,HID0_SGE | HID0_FOLD | HID0_BHTE
- ori r11,r11,HID0_LRSTK | HID0_BTIC
- oris r11,r11,HID0_DPM@h
+ ori r11,r11,HID0_LRSTK | HID0_BTIC | HID0_XBSEN
+ oris r11,r11,(HID0_DPM | HID0_XAEN)@h
BEGIN_FTR_SECTION
xori r11,r11,HID0_BTIC
END_FTR_SECTION_IFSET(CPU_FTR_NO_BTIC)
BEGIN_FTR_SECTION
xoris r11,r11,HID0_DPM@h /* disable dynamic power mgmt */
END_FTR_SECTION_IFSET(CPU_FTR_NO_DPM)
+BEGIN_FTR_SECTION
+ xori r11,r11,HID0_XBSEN
+ xoris r11,r11,HID0_XAEN@h
+END_FTR_SECTION_IFCLR(CPU_FTR_BIG_PHYS)
/* All of the bits we have to clear....
*/
diff -urN linux-2.6.13.3.orig/arch/ppc/kernel/cputable.c linux-2.6.13.3/arch/ppc/kernel/cputable.c
--- linux-2.6.13.3.orig/arch/ppc/kernel/cputable.c Fri Oct 21 05:49:53 2005
+++ linux-2.6.13.3/arch/ppc/kernel/cputable.c Fri Oct 21 21:11:55 2005
@@ -62,6 +62,12 @@
#define PPC_FEATURE_SPE_COMP 0
#endif
+#ifndef CONFIG_PHYS_64BIT
+#define CPU_FTR_BIG_PHYS_COMP CPU_FTR_BIG_PHYS
+#else
+#define CPU_FTR_BIG_PHYS_COMP 0
+#endif
+
/* We need to mark all pages as being coherent if we're SMP or we
* have a 74[45]x and an MPC107 host bridge.
*/
@@ -428,6 +434,7 @@
CPU_FTR_SPLIT_ID_CACHE | CPU_FTR_USE_TB |
CPU_FTR_L2CR | CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_HAS_HIGH_BATS | CPU_FTR_NEED_COHERENT,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
@@ -445,6 +452,7 @@
CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_L3_DISABLE_NAP |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_NEED_COHERENT | CPU_FTR_HAS_HIGH_BATS,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
@@ -462,6 +470,7 @@
CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_NEED_COHERENT,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
@@ -478,6 +487,7 @@
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR |
CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
@@ -496,6 +506,7 @@
CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_NEED_COHERENT | CPU_FTR_NO_BTIC,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
@@ -513,6 +524,7 @@
CPU_FTR_ALTIVEC_COMP | CPU_FTR_L3CR |
CPU_FTR_HPTE_TABLE | CPU_FTR_SPEC7450 |
CPU_FTR_NAP_DISABLE_L2_PR | CPU_FTR_HAS_HIGH_BATS |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_NEED_COHERENT,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
@@ -529,6 +541,7 @@
CPU_FTR_MAYBE_CAN_NAP | CPU_FTR_L2CR |
CPU_FTR_ALTIVEC_COMP | CPU_FTR_HPTE_TABLE |
CPU_FTR_SPEC7450 | CPU_FTR_NAP_DISABLE_L2_PR |
+ CPU_FTR_BIG_PHYS_COMP |
CPU_FTR_HAS_HIGH_BATS | CPU_FTR_NEED_COHERENT,
.cpu_user_features = COMMON_PPC | PPC_FEATURE_ALTIVEC_COMP,
.icache_bsize = 32,
diff -urN linux-2.6.13.3.orig/arch/ppc/kernel/head.S linux-2.6.13.3/arch/ppc/kernel/head.S
--- linux-2.6.13.3.orig/arch/ppc/kernel/head.S Fri Oct 21 05:49:53 2005
+++ linux-2.6.13.3/arch/ppc/kernel/head.S Fri Oct 21 21:12:17 2005
@@ -1165,6 +1165,12 @@
LOAD_BAT(1,r3,r4,r5)
LOAD_BAT(2,r3,r4,r5)
LOAD_BAT(3,r3,r4,r5)
+BEGIN_FTR_SECTION
+ LOAD_BAT(4,r3,r4,r5)
+ LOAD_BAT(5,r3,r4,r5)
+ LOAD_BAT(6,r3,r4,r5)
+ LOAD_BAT(7,r3,r4,r5)
+END_FTR_SECTION_IFSET(CPU_FTR_HAS_HIGH_BATS)
#endif /* CONFIG_POWER4 */
blr
diff -urN linux-2.6.13.3.orig/arch/ppc/mm/pgtable.c linux-2.6.13.3/arch/ppc/mm/pgtable.c
--- linux-2.6.13.3.orig/arch/ppc/mm/pgtable.c Fri Oct 21 05:49:53 2005
+++ linux-2.6.13.3/arch/ppc/mm/pgtable.c Fri Oct 21 05:53:49 2005
@@ -55,8 +55,8 @@
#ifdef HAVE_BATS
extern unsigned long v_mapped_by_bats(unsigned long va);
-extern unsigned long p_mapped_by_bats(unsigned long pa);
-void setbat(int index, unsigned long virt, unsigned long phys,
+extern unsigned long p_mapped_by_bats(phys_addr_t pa);
+void setbat(int index, unsigned long virt, phys_addr_t phys,
unsigned int size, int flags);
#else /* !HAVE_BATS */
@@ -339,7 +339,7 @@
/*
* Use a BAT for this if possible...
*/
- if (io_bat_index < 2 && is_power_of_2(size)
+ if (io_bat_index < (ppc_bat_count() - 2) && is_power_of_2(size)
&& (virt & (size - 1)) == 0 && (phys & (size - 1)) == 0) {
setbat(io_bat_index, virt, phys, size, flags);
++io_bat_index;
diff -urN linux-2.6.13.3.orig/arch/ppc/mm/ppc_mmu.c linux-2.6.13.3/arch/ppc/mm/ppc_mmu.c
--- linux-2.6.13.3.orig/arch/ppc/mm/ppc_mmu.c Fri Oct 21 05:49:53 2005
+++ linux-2.6.13.3/arch/ppc/mm/ppc_mmu.c Fri Oct 21 21:15:07 2005
@@ -47,13 +47,13 @@
#else
u32 word[2];
#endif
-} BATS[4][2]; /* 4 pairs of IBAT, DBAT */
+} BATS[8][2]; /* 8 pairs of IBAT, DBAT */
struct batrange { /* stores address ranges mapped by BATs */
unsigned long start;
unsigned long limit;
- unsigned long phys;
-} bat_addrs[4];
+ phys_addr_t phys;
+} bat_addrs[8];
/*
* Return PA for this VA if it is mapped by a BAT, or 0
@@ -70,7 +70,7 @@
/*
* Return VA for a given PA or 0 if not mapped
*/
-unsigned long p_mapped_by_bats(unsigned long pa)
+unsigned long p_mapped_by_bats(phys_addr_t pa)
{
int b;
for (b = 0; b < 4; ++b)
@@ -87,13 +87,14 @@
return 0;
#else
unsigned long tot, bl, done;
- unsigned long max_size = (256<<20);
+ unsigned long max_size = ppc_max_bat_size();
unsigned long align;
+ int bat_nbr = ppc_bat_count() - 2;
if (__map_without_bats)
return 0;
- /* Set up BAT2 and if necessary BAT3 to cover RAM. */
+ /* Set up BAT[2|6] and if necessary BAT[3|7] to cover RAM. */
/* Make sure we don't map a block larger than the
smallest alignment of the physical address. */
@@ -109,16 +110,17 @@
break;
}
- setbat(2, KERNELBASE, PPC_MEMSTART, bl, _PAGE_RAM);
- done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1;
- if ((done < tot) && !bat_addrs[3].limit) {
- /* use BAT3 to cover a bit more */
+ setbat(bat_nbr, KERNELBASE, PPC_MEMSTART, bl, _PAGE_RAM);
+ done = (unsigned long)bat_addrs[bat_nbr].limit - KERNELBASE + 1;
+ bat_nbr++;
+ if ((done < tot) && !bat_addrs[bat_nbr].limit) {
+ /* use BAT[3|7] to cover a bit more */
tot -= done;
for (bl = 128<<10; bl < max_size; bl <<= 1)
if (bl * 2 > tot)
break;
- setbat(3, KERNELBASE+done, PPC_MEMSTART+done, bl, _PAGE_RAM);
- done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1;
+ setbat(bat_nbr, KERNELBASE+done, PPC_MEMSTART+done, bl, _PAGE_RAM);
+ done = (unsigned long)bat_addrs[bat_nbr].limit - KERNELBASE + 1;
}
return done;
@@ -130,7 +132,7 @@
* The parameters are not checked; in particular size must be a power
* of 2 between 128k and 256M.
*/
-void __init setbat(int index, unsigned long virt, unsigned long phys,
+void __init setbat(int index, unsigned long virt, phys_addr_t phys,
unsigned int size, int flags)
{
unsigned int bl;
@@ -148,6 +150,9 @@
wimgxpp = flags & (_PAGE_WRITETHRU | _PAGE_NO_CACHE
| _PAGE_COHERENT | _PAGE_GUARDED);
wimgxpp |= (flags & _PAGE_RW)? BPP_RW: BPP_RX;
+#ifdef CONFIG_PHYS_64BIT
+ wimgxpp |= ((phys >> 30) & 4) | ((phys >> 24) & 0xe00);
+#endif
bat[1].word[0] = virt | (bl << 2) | 2; /* Vs=1, Vp=0 */
bat[1].word[1] = phys | wimgxpp;
#ifndef CONFIG_KGDB /* want user access for breakpoints */
diff -urN linux-2.6.13.3.orig/include/asm-ppc/mmu.h linux-2.6.13.3/include/asm-ppc/mmu.h
--- linux-2.6.13.3.orig/include/asm-ppc/mmu.h Fri Oct 21 05:44:49 2005
+++ linux-2.6.13.3/include/asm-ppc/mmu.h Fri Oct 21 21:23:55 2005
@@ -18,11 +18,19 @@
#ifndef CONFIG_PHYS_64BIT
typedef unsigned long phys_addr_t;
#define PHYS_FMT "%.8lx"
+#define cpu_has_bigphys() 0
+#define ppc_max_bat_size() (256<<20)
#else
typedef unsigned long long phys_addr_t;
extern phys_addr_t fixup_bigphys_addr(phys_addr_t, phys_addr_t);
#define PHYS_FMT "%16Lx"
+#define cpu_has_bigphys() cpu_has_feature(CPU_FTR_BIG_PHYS)
+/* We don't allow 4G Bat's because it doesn't fit into size_t */
+#define ppc_max_bat_size() \
+ (cpu_has_feature(CPU_FTR_BIG_PHYS)?(2<<30):(256<<20))
#endif
+
+#define ppc_bat_count() (cpu_has_feature(CPU_FTR_HAS_HIGH_BATS) ? 8 : 4)
/* Default "unsigned long" context */
typedef unsigned long mm_context_t;
^ permalink raw reply
* [PATCH] dmasound_pmac depends on pmac specific config options
From: Olaf Hering @ 2005-10-22 19:46 UTC (permalink / raw)
To: Andrew Morton, Benjamin Herrenschmidt; +Cc: linuxppc-dev
dmasound_pmac should depend on pmac specific .config options.
Since PMAC is always defined, but PMAC wont boot without either
CUDA or PMU, one of these options indicates that the kernel is
for a PowerMac.
CONFIG_PM can be selected unconditionally.
sound/oss/dmasound/dmasound_awacs.c:262: warning: `struct pmu_sleep_notifier' declared inside parameter list
sound/oss/dmasound/dmasound_awacs.c:262: warning: its scope is only this definition or declaration, which is probably not what you want
sound/oss/dmasound/dmasound_awacs.c:263: error: variable `awacs_sleep_notifier' has initializer but incomplete type
sound/oss/dmasound/dmasound_awacs.c:264: warning: excess elements in struct initializer
sound/oss/dmasound/dmasound_awacs.c:264: warning: (near initialization for `awacs_sleep_notifier')
sound/oss/dmasound/dmasound_awacs.c:264: error: `SLEEP_LEVEL_SOUND' undeclared here (not in a function)
sound/oss/dmasound/dmasound_awacs.c:264: warning: excess elements in struct initializer
sound/oss/dmasound/dmasound_awacs.c:264: warning: (near initialization for `awacs_sleep_notifier')
sound/oss/dmasound/dmasound_awacs.c: In function `PMacIrqCleanup':
sound/oss/dmasound/dmasound_awacs.c:679: warning: implicit declaration of function `pmu_unregister_sleep_notifier'
sound/oss/dmasound/dmasound_awacs.c: At top level:
sound/oss/dmasound/dmasound_awacs.c:1424: error: conflicting types for `awacs_sleep_notify'
sound/oss/dmasound/dmasound_awacs.c:262: error: previous declaration of `awacs_sleep_notify'
sound/oss/dmasound/dmasound_awacs.c: In function `awacs_sleep_notify':
sound/oss/dmasound/dmasound_awacs.c:1428: error: `PBOOK_SLEEP_NOW' undeclared (first use in this function)
sound/oss/dmasound/dmasound_awacs.c:1428: error: (Each undeclared identifier is reported only once
sound/oss/dmasound/dmasound_awacs.c:1428: error: for each function it appears in.)
sound/oss/dmasound/dmasound_awacs.c:1481: error: `PBOOK_WAKE' undeclared (first use in this function)
sound/oss/dmasound/dmasound_awacs.c:1552: error: `PBOOK_SLEEP_OK' undeclared (first use in this function)
sound/oss/dmasound/dmasound_awacs.c: In function `dmasound_awacs_init':
sound/oss/dmasound/dmasound_awacs.c:3057: warning: implicit declaration of function `pmu_register_sleep_notifier'
sound/oss/dmasound/dmasound_awacs.c: At top level:
sound/oss/dmasound/dmasound_awacs.c:263: error: storage size of `awacs_sleep_notifier' isn't known
Signed-off-by: Olaf Hering <olh@suse.de>
sound/oss/dmasound/Kconfig | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
Index: linux-2.6.14-rc5/sound/oss/dmasound/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/sound/oss/dmasound/Kconfig
+++ linux-2.6.14-rc5/sound/oss/dmasound/Kconfig
@@ -14,7 +14,7 @@ config DMASOUND_ATARI
config DMASOUND_PMAC
tristate "PowerMac DMA sound support"
- depends on PPC32 && PPC_PMAC && SOUND && I2C
+ depends on PPC32 && PPC_PMAC && SOUND && I2C && (ADB_CUDA || ADB_PMU)
select DMASOUND
help
If you want to use the internal audio of your PowerMac in Linux,
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* [PATCH] snd_powermac depends on pmac specific config options
From: Olaf Hering @ 2005-10-22 19:55 UTC (permalink / raw)
To: Andrew Morton, Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <20051022194626.GA3496@suse.de>
snd_powermac should depend on pmac specific .config options.
Since PMAC is always defined, but PMAC wont boot without either
CUDA or PMU, one of these options indicates that the kernel is
for a PowerMac.
CONFIG_PM can be selected unconditionally.
sound/ppc/pmac.c:1380: warning: `struct pmu_sleep_notifier' declared inside parameter list
sound/ppc/pmac.c:1380: warning: its scope is only this definition or declaration, which is probably not what you want
sound/ppc/pmac.c: In function `snd_pmac_sleep_notify':
sound/ppc/pmac.c:1388: error: `PBOOK_SLEEP_NOW' undeclared (first use in this function)
sound/ppc/pmac.c:1388: error: (Each undeclared identifier is reported only once
sound/ppc/pmac.c:1388: error: for each function it appears in.)
sound/ppc/pmac.c:1391: error: `PBOOK_WAKE' undeclared (first use in this function)
sound/ppc/pmac.c:1395: error: `PBOOK_SLEEP_OK' undeclared (first use in this function)
sound/ppc/pmac.c: At top level:
sound/ppc/pmac.c:1398: error: variable `snd_pmac_sleep_notifier' has initializer but incomplete type
sound/ppc/pmac.c:1399: warning: excess elements in struct initializer
sound/ppc/pmac.c:1399: warning: (near initialization for `snd_pmac_sleep_notifier')
sound/ppc/pmac.c:1399: error: `SLEEP_LEVEL_SOUND' undeclared here (not in a function)
sound/ppc/pmac.c:1399: warning: excess elements in struct initializer
sound/ppc/pmac.c:1399: warning: (near initialization for `snd_pmac_sleep_notifier')
sound/ppc/pmac.c: In function `snd_pmac_register_sleep_notifier':
sound/ppc/pmac.c:1407: warning: implicit declaration of function `pmu_register_sleep_notifier'
sound/ppc/pmac.c: In function `snd_pmac_unregister_sleep_notifier':
sound/ppc/pmac.c:1415: warning: implicit declaration of function `pmu_unregister_sleep_notifier'
sound/ppc/pmac.c: At top level:
sound/ppc/pmac.c:1398: error: storage size of `snd_pmac_sleep_notifier' isn't known
make[3]: *** [sound/ppc/pmac.o] Error 1
Signed-off-by: Olaf Hering <olh@suse.de>
sound/ppc/Kconfig | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
Index: linux-2.6.14-rc5/sound/ppc/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/sound/ppc/Kconfig
+++ linux-2.6.14-rc5/sound/ppc/Kconfig
@@ -11,7 +11,7 @@ comment "ALSA PowerMac requires INPUT"
config SND_POWERMAC
tristate "PowerMac (AWACS, DACA, Burgundy, Tumbler, Keywest)"
- depends on SND && I2C && INPUT && PPC_PMAC
+ depends on SND && I2C && INPUT && PPC_PMAC && (ADB_CUDA || ADB_PMU)
select SND_PCM
select SND_GENERIC_DRIVER
help
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Brad Boyer @ 2005-10-22 21:01 UTC (permalink / raw)
To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022194626.GA3496@suse.de>
On Sat, Oct 22, 2005 at 09:46:26PM +0200, Olaf Hering wrote:
>
> dmasound_pmac should depend on pmac specific .config options.
> Since PMAC is always defined, but PMAC wont boot without either
> CUDA or PMU, one of these options indicates that the kernel is
> for a PowerMac.
> CONFIG_PM can be selected unconditionally.
I disagree. I think a much better solution would be to change the
code to be conditionalized internally on PMU support, rather than
having #ifdef CONFIG_PM since the functions being called inside
that protection are actually out of the PMU code, not the generic
power management system. By doing this, you could for example
have a kernel compiled for a 1st gen PCI PowerMac without any
extra drivers. In this case, you have CUDA and AWACS, but there
is no PMU support and no need for sleep notifiers.
Similar comments on the other patch.
Brad Boyer
flar@allandria.com
^ permalink raw reply
* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Olaf Hering @ 2005-10-22 21:19 UTC (permalink / raw)
To: Brad Boyer; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022210122.GA9638@pants.nu>
On Sat, Oct 22, Brad Boyer wrote:
> I disagree. I think a much better solution would be to change the
> code to be conditionalized internally on PMU support, rather than
> having #ifdef CONFIG_PM since the functions being called inside
> that protection are actually out of the PMU code, not the generic
> power management system. By doing this, you could for example
> have a kernel compiled for a 1st gen PCI PowerMac without any
> extra drivers. In this case, you have CUDA and AWACS, but there
> is no PMU support and no need for sleep notifiers.
May patch would allow that, you need either CUDA or PMU support.
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* [PATCH] Cleanup mpc83xx_restart() code
From: Wolfgang Denk @ 2005-10-22 21:28 UTC (permalink / raw)
To: linuxppc-dev
The current Linux 2.6 mpc83xx_restart() routine which is supposed to
be common for all MPC83xx boards actually performs mpc834x_sys board
specific operations. This code was moved to
arch/ppc/platforms/83xx/mpc834x_sys.c, and mpc83xx_restart() was
replaced with generic MPC83xx reset code. Now mpc834x_sys uses it's
platform specific restart code and we can use common MPC83xx reset
code in other MPC83xx boards
---
ppc83xx common code cleanup, MPC834x_SYS platform specific code moved to
arch/ppc/platform/83xx/mpc834x_sys.c
Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
---
commit 8176ad2d83c41be9697b475c8c0b975908cb7843
tree 16a5246f615529cf423b63231990723ab8a6bd13
parent 80387b45146a9e397c1fec1138f3eb3884c42ed8
author Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:35:07 +0200
committer Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:35:07 +0200
arch/ppc/platforms/83xx/mpc834x_sys.c | 36 ++++++++++++++++++++++++
arch/ppc/syslib/ppc83xx_setup.c | 49 +++++++++++----------------------
include/asm-ppc/mpc83xx.h | 13 +++++++++
3 files changed, 65 insertions(+), 33 deletions(-)
diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c
--- a/arch/ppc/platforms/83xx/mpc834x_sys.c
+++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
@@ -245,6 +245,40 @@ mpc834x_sys_set_bat(void)
mb();
}
+void
+mpc83xx_sys_restart(char *cmd)
+{
+ volatile unsigned char __iomem *reg;
+ unsigned char tmp;
+
+ reg = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE);
+
+ local_irq_disable();
+
+ /*
+ * Unlock the BCSR bits so a PRST will update the contents.
+ * Otherwise the reset asserts but doesn't clear.
+ */
+ tmp = in_8(reg + BCSR_MISC_REG3_OFF);
+ tmp |= BCSR_MISC_REG3_CNFLOCK; /* low true, high false */
+ out_8(reg + BCSR_MISC_REG3_OFF, tmp);
+
+ /*
+ * Trigger a reset via a low->high transition of the
+ * PORESET bit.
+ */
+ tmp = in_8(reg + BCSR_MISC_REG2_OFF);
+ tmp &= ~BCSR_MISC_REG2_PORESET;
+ out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+
+ udelay(1);
+
+ tmp |= BCSR_MISC_REG2_PORESET;
+ out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+
+ for(;;);
+}
+
void __init
platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
unsigned long r6, unsigned long r7)
@@ -313,7 +347,7 @@ platform_init(unsigned long r3, unsigned
ppc_md.init_IRQ = mpc834x_sys_init_IRQ;
ppc_md.get_irq = ipic_get_irq;
- ppc_md.restart = mpc83xx_restart;
+ ppc_md.restart = mpc83xx_sys_restart;
ppc_md.power_off = mpc83xx_power_off;
ppc_md.halt = mpc83xx_halt;
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c
--- a/arch/ppc/syslib/ppc83xx_setup.c
+++ b/arch/ppc/syslib/ppc83xx_setup.c
@@ -63,13 +63,10 @@ mpc83xx_find_end_of_memory(void)
long __init
mpc83xx_time_init(void)
{
-#define SPCR_OFFS 0x00000110
-#define SPCR_TBEN 0x00400000
-
bd_t *binfo = (bd_t *)__res;
- u32 *spcr = ioremap(binfo->bi_immr_base + SPCR_OFFS, 4);
+ u32 *spcr = ioremap(binfo->bi_immr_base + MPC83xx_SPCR, 4);
- *spcr |= SPCR_TBEN;
+ *spcr |= MPC83xx_SPCR_TBEN;
iounmap(spcr);
@@ -132,35 +129,23 @@ mpc83xx_early_serial_map(void)
void
mpc83xx_restart(char *cmd)
{
- volatile unsigned char __iomem *reg;
- unsigned char tmp;
-
- reg = ioremap(BCSR_PHYS_ADDR, BCSR_SIZE);
-
- local_irq_disable();
-
- /*
- * Unlock the BCSR bits so a PRST will update the contents.
- * Otherwise the reset asserts but doesn't clear.
- */
- tmp = in_8(reg + BCSR_MISC_REG3_OFF);
- tmp |= BCSR_MISC_REG3_CNFLOCK; /* low true, high false */
- out_8(reg + BCSR_MISC_REG3_OFF, tmp);
-
- /*
- * Trigger a reset via a low->high transition of the
- * PORESET bit.
- */
- tmp = in_8(reg + BCSR_MISC_REG2_OFF);
- tmp &= ~BCSR_MISC_REG2_PORESET;
- out_8(reg + BCSR_MISC_REG2_OFF, tmp);
-
- udelay(1);
+ bd_t *binfo = (bd_t *)__res;
- tmp |= BCSR_MISC_REG2_PORESET;
- out_8(reg + BCSR_MISC_REG2_OFF, tmp);
+ u32 *rcr = ioremap(binfo->bi_immr_base + MPC83xx_RCR, 4);
+ u32 *rpr = ioremap(binfo->bi_immr_base + MPC83xx_RPR, 4);
- for(;;);
+ /* apply reset protect unlock command to
+ * reset control protection register */
+ *rpr = MPC83xx_RPR_RSTE;
+
+ /* apply software hard reset to
+ * reset control register*/
+ *rcr = MPC83xx_RCR_SWHR;
+
+ /* not reached, but... */
+ iounmap(rcr);
+ iounmap(rpr);
+ for (;;) ;
}
void
diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
--- a/include/asm-ppc/mpc83xx.h
+++ b/include/asm-ppc/mpc83xx.h
@@ -95,6 +95,19 @@ extern unsigned char __res[];
#define MPC83xx_CCSRBAR_SIZE (1024*1024)
+/* system priority and configuration register */
+#define MPC83xx_SPCR 0x00000110
+#define MPC83xx_SPCR_TBEN 0x00400000
+
+/* reset protection register */
+#define MPC83xx_RPR 0x00000918
+#define MPC83xx_RPR_RSTE 0x52535445 /* "RSTE" in ASCII */
+
+/* reset control register*/
+#define MPC83xx_RCR 0x0000091c
+#define MPC83xx_RCR_SWHR 0x00000002 /* sw hard reset */
+#define MPC83xx_RCR_SWSR 0x00000001 /* sw soft reset */
+
/* Let modules/drivers get at immrbar (physical) */
extern phys_addr_t immrbar;
\f
!-------------------------------------------------------------flip-
Best regards,
Wolfgang Denk
--
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
You can observe a lot just by watching. - Yogi Berra
^ permalink raw reply
* [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Olaf Hering @ 2005-10-22 21:30 UTC (permalink / raw)
To: Benjamin Herrenschmidt, Andrew Morton; +Cc: linuxppc-dev
This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606
Hiding a few pmac specific drivers when ADB is disabled can not hurt:
AGP_UNINORTH exist only on systems with ADB_PMU
I2C_KEYWEST is used by sound
MACE exists only on systems with ADB_CUDA
BMAC exists on old and new Macs
SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
SERIAL_PMACZILOG exists on old and new Macs
BLK_DEV_IDE_PMAC exists on old and new Macs
APPLE_AIRPORT exist only on systems with ADB_PMU
FB_CONTROL exists only on old Macs
FB_PLATINUM exists only on old Macs
FB_VALKYRIE exists only on old Macs
FB_CT65550 exists only on old Macs
Signed-off-by: Olaf Hering <olh@suse.de>
drivers/char/agp/Kconfig | 2 +-
drivers/i2c/busses/Kconfig | 2 +-
drivers/ide/Kconfig | 2 +-
drivers/net/Kconfig | 4 ++--
drivers/net/wireless/Kconfig | 2 +-
drivers/scsi/Kconfig | 4 ++--
drivers/serial/Kconfig | 2 +-
drivers/video/Kconfig | 8 ++++----
8 files changed, 13 insertions(+), 13 deletions(-)
Index: linux-2.6.14-rc5/drivers/char/agp/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/char/agp/Kconfig
+++ linux-2.6.14-rc5/drivers/char/agp/Kconfig
@@ -147,7 +147,7 @@ config AGP_ALPHA_CORE
config AGP_UNINORTH
tristate "Apple UniNorth & U3 AGP support"
- depends on AGP && PPC_PMAC
+ depends on AGP && PPC_PMAC && ADB_PMU
help
This option gives you AGP support for Apple machines with a
UniNorth or U3 (Apple G5) bridge.
Index: linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/i2c/busses/Kconfig
+++ linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
@@ -237,7 +237,7 @@ config I2C_IXP2000
config I2C_KEYWEST
tristate "Powermac Keywest I2C interface"
- depends on I2C && PPC_PMAC
+ depends on I2C && PPC_PMAC && (ADB_CUDA || ADB_PMU)
help
This supports the use of the I2C interface in the combo-I/O
chip on recent Apple machines. Say Y if you have such a machine.
Index: linux-2.6.14-rc5/drivers/net/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/net/Kconfig
+++ linux-2.6.14-rc5/drivers/net/Kconfig
@@ -178,7 +178,7 @@ source "drivers/net/arm/Kconfig"
config MACE
tristate "MACE (Power Mac ethernet) support"
- depends on NET_ETHERNET && PPC_PMAC && PPC32
+ depends on NET_ETHERNET && PPC_PMAC && PPC32 && ADB_CUDA
select CRC32
help
Power Macintoshes and clones with Ethernet built-in on the
@@ -201,7 +201,7 @@ config MACE_AAUI_PORT
config BMAC
tristate "BMAC (G3 ethernet) support"
- depends on NET_ETHERNET && PPC_PMAC && PPC32
+ depends on NET_ETHERNET && PPC_PMAC && PPC32 && (ADB_CUDA || ADB_PMU)
select CRC32
help
Say Y for support of BMAC Ethernet interfaces. These are used on G3
Index: linux-2.6.14-rc5/drivers/scsi/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
+++ linux-2.6.14-rc5/drivers/scsi/Kconfig
@@ -1529,7 +1529,7 @@ config SCSI_DEBUG
config SCSI_MESH
tristate "MESH (Power Mac internal SCSI) support"
- depends on PPC32 && PPC_PMAC && SCSI
+ depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
help
Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
@@ -1560,7 +1560,7 @@ config SCSI_MESH_RESET_DELAY_MS
config SCSI_MAC53C94
tristate "53C94 (Power Mac external SCSI) support"
- depends on PPC32 && PPC_PMAC && SCSI
+ depends on PPC32 && PPC_PMAC && SCSI && ADB_CUDA
help
On Power Macintoshes (and clones) with two SCSI buses, the external
SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
Index: linux-2.6.14-rc5/drivers/serial/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/serial/Kconfig
+++ linux-2.6.14-rc5/drivers/serial/Kconfig
@@ -651,7 +651,7 @@ config SERIAL_68360
config SERIAL_PMACZILOG
tristate "PowerMac z85c30 ESCC support"
- depends on PPC_OF && PPC_PMAC
+ depends on PPC_OF && PPC_PMAC && (ADB_CUDA || ADB_PMU)
select SERIAL_CORE
help
This driver supports the Zilog z85C30 serial ports found on
Index: linux-2.6.14-rc5/drivers/ide/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/ide/Kconfig
+++ linux-2.6.14-rc5/drivers/ide/Kconfig
@@ -744,7 +744,7 @@ endif
config BLK_DEV_IDE_PMAC
bool "Builtin PowerMac IDE support"
- depends on PPC_PMAC && IDE=y
+ depends on PPC_PMAC && IDE=y && (ADB_CUDA || ADB_PMU)
help
This driver provides support for the built-in IDE controller on
most of the recent Apple Power Macintoshes and PowerBooks.
Index: linux-2.6.14-rc5/drivers/net/wireless/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/net/wireless/Kconfig
+++ linux-2.6.14-rc5/drivers/net/wireless/Kconfig
@@ -281,7 +281,7 @@ config HERMES
config APPLE_AIRPORT
tristate "Apple Airport support (built-in)"
- depends on PPC_PMAC && HERMES
+ depends on PPC_PMAC && HERMES && ADB_PMU
help
Say Y here to support the Airport 802.11b wireless Ethernet hardware
built into the Macintosh iBook and other recent PowerPC-based
Index: linux-2.6.14-rc5/drivers/video/Kconfig
===================================================================
--- linux-2.6.14-rc5.orig/drivers/video/Kconfig
+++ linux-2.6.14-rc5/drivers/video/Kconfig
@@ -359,7 +359,7 @@ config FB_OF
config FB_CONTROL
bool "Apple \"control\" display support"
- depends on (FB = y) && PPC_PMAC
+ depends on (FB = y) && PPC_PMAC && ADB_CUDA
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
@@ -371,7 +371,7 @@ config FB_CONTROL
config FB_PLATINUM
bool "Apple \"platinum\" display support"
- depends on (FB = y) && PPC_PMAC
+ depends on (FB = y) && PPC_PMAC && ADB_CUDA
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
@@ -383,7 +383,7 @@ config FB_PLATINUM
config FB_VALKYRIE
bool "Apple \"valkyrie\" display support"
- depends on (FB = y) && (MAC || PPC_PMAC)
+ depends on (FB = y) && (MAC || (PPC_PMAC && ADB_CUDA))
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
@@ -395,7 +395,7 @@ config FB_VALKYRIE
config FB_CT65550
bool "Chips 65550 display support"
- depends on (FB = y) && PPC
+ depends on (FB = y) && PPC_PMAC && ADB_CUDA
select FB_CFB_FILLRECT
select FB_CFB_COPYAREA
select FB_CFB_IMAGEBLIT
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* [PATCH] pmu_register_sleep_notifier needs ADB_PMU
From: Olaf Hering @ 2005-10-22 21:32 UTC (permalink / raw)
To: Benjamin Herrenschmidt, linuxppc-dev
a simple patch for a pegsos user:
https://bugzilla.novell.com/show_bug.cgi?id=119606
arch/ppc/platforms/built-in.o(.init.text+0x10a4): In function `core99_wake_up':
: undefined reference to `pmu_register_sleep_notifier'
make[1]: *** [.tmp_vmlinux1] Error 1
Signed-off-by: Olaf Hering <olh@suse.de>
arch/ppc/platforms/pmac_sleep.S | 2 +-
arch/ppc/platforms/pmac_time.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
Index: linux-2.6.14-rc5/arch/ppc/platforms/pmac_sleep.S
===================================================================
--- linux-2.6.14-rc5.orig/arch/ppc/platforms/pmac_sleep.S
+++ linux-2.6.14-rc5/arch/ppc/platforms/pmac_sleep.S
@@ -46,7 +46,7 @@
.section .text
.align 5
-#if defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC)
+#if (defined(CONFIG_PM) || defined(CONFIG_CPU_FREQ_PMAC)) && defined(CONFIG_ADB_PMU)
/* This gets called by via-pmu.c late during the sleep process.
* The PMU was already send the sleep command and will shut us down
Index: linux-2.6.14-rc5/arch/ppc/platforms/pmac_time.c
===================================================================
--- linux-2.6.14-rc5.orig/arch/ppc/platforms/pmac_time.c
+++ linux-2.6.14-rc5/arch/ppc/platforms/pmac_time.c
@@ -206,7 +206,7 @@ via_calibrate_decr(void)
return 1;
}
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
/*
* Reset the time after a sleep.
*/
@@ -251,7 +251,7 @@ pmac_calibrate_decr(void)
struct device_node *cpu;
unsigned int freq, *fp;
-#ifdef CONFIG_PM
+#if defined(CONFIG_PM) && defined(CONFIG_ADB_PMU)
pmu_register_sleep_notifier(&time_sleep_notifier);
#endif /* CONFIG_PM */
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* [Patch] Add support for TQM834x Boards
From: Wolfgang Denk @ 2005-10-22 22:06 UTC (permalink / raw)
To: linuxppc-dev
The following patch (against latest 2.6 tree) adds support for the TQ
Systems TQM834x Boards. Verified on TQM8349L.
Note: for TQM834x board support actually to compile and work, two
previously submitted patches are required. See postings:
Sat, 22 Oct 2005 [PATCH 2.6] Add generic support for DS1377 RTC
Sat, 22 Oct 2005 [PATCH] Cleanup mpc83xx_restart() code
---
Add support for TQM834x boards.
Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
---
arch/ppc/Kconfig | 11
arch/ppc/configs/TQM834x_defconfig | 819 ++++++++++++++++++++++++++++++++++++
arch/ppc/platforms/83xx/Makefile | 1
arch/ppc/platforms/83xx/tqm834x.c | 336 +++++++++++++++
arch/ppc/platforms/83xx/tqm834x.h | 40 ++
drivers/mtd/maps/Kconfig | 8
drivers/mtd/maps/Makefile | 1
drivers/mtd/maps/tqm834x.c | 298 +++++++++++++
include/asm-ppc/mpc83xx.h | 4
9 files changed, 1516 insertions(+), 2 deletions(-)
diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig
--- a/arch/ppc/Kconfig
+++ b/arch/ppc/Kconfig
@@ -690,6 +690,12 @@ config EV64360
help
Select EV64360 if configuring a Marvell EV64360BP Evaluation
platform.
+
+config TQM834x
+ bool "TQM834x"
+ help
+ This option enables support for the TQM834x boards from TQ
+ Components.
endchoice
config PQ2ADS
@@ -730,11 +736,11 @@ config 8272
config 83xx
bool
- default y if MPC834x_SYS
+ default y if MPC834x_SYS || TQM834x
config MPC834x
bool
- default y if MPC834x_SYS
+ default y if MPC834x_SYS || TQM834x
config CPM2
bool
@@ -1170,6 +1176,7 @@ config PCI_DOMAINS
config MPC83xx_PCI2
bool " Supprt for 2nd PCI host controller"
depends on PCI && MPC834x
+ depends on !TQM834x
default y if MPC834x_SYS
config PCI_QSPAN
diff --git a/arch/ppc/configs/TQM834x_defconfig b/arch/ppc/configs/TQM834x_defconfig
new file mode 100644
--- /dev/null
+++ b/arch/ppc/configs/TQM834x_defconfig
@@ -0,0 +1,819 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.14-rc4
+# Mon Oct 17 17:22:19 2005
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_HOTPLUG is not set
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_EMBEDDED=y
+# CONFIG_KALLSYMS is not set
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+# CONFIG_EPOLL is not set
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+# CONFIG_MODULES is not set
+
+#
+# Processor
+#
+CONFIG_6xx=y
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+# CONFIG_8xx is not set
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_PPC_FPU=y
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_PPC_GEN550=y
+CONFIG_PPC_STD_MMU=y
+
+#
+# Platform options
+#
+# CONFIG_PPC_MULTIPLATFORM is not set
+# CONFIG_APUS is not set
+# CONFIG_KATANA is not set
+# CONFIG_WILLOW is not set
+# CONFIG_CPCI690 is not set
+# CONFIG_POWERPMC250 is not set
+# CONFIG_CHESTNUT is not set
+# CONFIG_SPRUCE is not set
+# CONFIG_HDPU is not set
+# CONFIG_EV64260 is not set
+# CONFIG_LOPEC is not set
+# CONFIG_MVME5100 is not set
+# CONFIG_PPLUS is not set
+# CONFIG_PRPMC750 is not set
+# CONFIG_PRPMC800 is not set
+# CONFIG_SANDPOINT is not set
+# CONFIG_RADSTONE_PPC7D is not set
+# CONFIG_PAL4 is not set
+# CONFIG_GEMINI is not set
+# CONFIG_EST8260 is not set
+# CONFIG_SBC82xx is not set
+# CONFIG_SBS8260 is not set
+# CONFIG_RPX8260 is not set
+# CONFIG_TQM8260 is not set
+# CONFIG_ADS8272 is not set
+# CONFIG_PQ2FADS is not set
+# CONFIG_LITE5200 is not set
+# CONFIG_MPC834x_SYS is not set
+# CONFIG_EV64360 is not set
+CONFIG_TQM834x=y
+CONFIG_83xx=y
+CONFIG_MPC834x=y
+# CONFIG_SMP is not set
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+CONFIG_SECCOMP=y
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+CONFIG_GENERIC_ISA_DMA=y
+# CONFIG_PCI is not set
+# CONFIG_PCI_DOMAINS is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Advanced setup
+#
+# CONFIG_ADVANCED_OPTIONS is not set
+
+#
+# Default settings for advanced configuration options are used
+#
+CONFIG_HIGHMEM_START=0xfe000000
+CONFIG_LOWMEM_SIZE=0x30000000
+CONFIG_KERNEL_START=0xc0000000
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_BOOT_LOAD=0x00800000
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_NET_CLS_ROUTE is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+CONFIG_MTD_CFI_GEOMETRY=y
+# CONFIG_MTD_MAP_BANK_WIDTH_1 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_2 is not set
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+# CONFIG_MTD_CFI_I1 is not set
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+# CONFIG_MTD_CFI_INTELEXT is not set
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_RETRY=0
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+CONFIG_MTD_TQM834x=y
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+# CONFIG_MTD_NAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=32768
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_LBD is not set
+# CONFIG_CDROM_PKTCDVD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Macintosh device drivers
+#
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+
+#
+# Ethernet (1000 Mbit)
+#
+CONFIG_GIANFAR=y
+# CONFIG_GFAR_NAPI is not set
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+
+#
+# Userland interfaces
+#
+# CONFIG_INPUT_MOUSEDEV is not set
+# CONFIG_INPUT_JOYDEV is not set
+# CONFIG_INPUT_TSDEV is not set
+# CONFIG_INPUT_EVDEV is not set
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+# CONFIG_INPUT_KEYBOARD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TOUCHSCREEN is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=4
+# CONFIG_SERIAL_8250_EXTENDED is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+# CONFIG_WATCHDOG is not set
+# CONFIG_NVRAM is not set
+CONFIG_GEN_RTC=y
+# CONFIG_GEN_RTC_X is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+
+#
+# I2C support
+#
+CONFIG_I2C=y
+CONFIG_I2C_CHARDEV=y
+
+#
+# I2C Algorithms
+#
+# CONFIG_I2C_ALGOBIT is not set
+# CONFIG_I2C_ALGOPCF is not set
+# CONFIG_I2C_ALGOPCA is not set
+
+#
+# I2C Hardware Bus support
+#
+CONFIG_I2C_MPC=y
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_PCA_ISA is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+CONFIG_SENSORS_DS1337=y
+# CONFIG_SENSORS_DS1374 is not set
+# CONFIG_SENSORS_EEPROM is not set
+# CONFIG_SENSORS_PCF8574 is not set
+# CONFIG_SENSORS_PCA9539 is not set
+# CONFIG_SENSORS_PCF8591 is not set
+# CONFIG_SENSORS_RTC8564 is not set
+# CONFIG_SENSORS_M41T00 is not set
+# CONFIG_SENSORS_MAX6875 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_SENSORS_ADM1021 is not set
+# CONFIG_SENSORS_ADM1025 is not set
+# CONFIG_SENSORS_ADM1026 is not set
+# CONFIG_SENSORS_ADM1031 is not set
+# CONFIG_SENSORS_ADM9240 is not set
+# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATXP1 is not set
+# CONFIG_SENSORS_DS1621 is not set
+# CONFIG_SENSORS_FSCHER is not set
+# CONFIG_SENSORS_FSCPOS is not set
+# CONFIG_SENSORS_GL518SM is not set
+# CONFIG_SENSORS_GL520SM is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM63 is not set
+CONFIG_SENSORS_LM75=y
+# CONFIG_SENSORS_LM77 is not set
+# CONFIG_SENSORS_LM78 is not set
+# CONFIG_SENSORS_LM80 is not set
+# CONFIG_SENSORS_LM83 is not set
+# CONFIG_SENSORS_LM85 is not set
+# CONFIG_SENSORS_LM87 is not set
+# CONFIG_SENSORS_LM90 is not set
+# CONFIG_SENSORS_LM92 is not set
+# CONFIG_SENSORS_MAX1619 is not set
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_W83781D is not set
+# CONFIG_SENSORS_W83792D is not set
+# CONFIG_SENSORS_W83L785TS is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+CONFIG_EXT3_FS_XATTR=y
+# CONFIG_EXT3_FS_POSIX_ACL is not set
+# CONFIG_EXT3_FS_SECURITY is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+CONFIG_FS_MBCACHE=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+CONFIG_DNOTIFY=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+# CONFIG_NFS_V3 is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+
+#
+# Profiling support
+#
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_DEBUG_KERNEL is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_SERIAL_TEXT_DEBUG is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/arch/ppc/platforms/83xx/Makefile b/arch/ppc/platforms/83xx/Makefile
--- a/arch/ppc/platforms/83xx/Makefile
+++ b/arch/ppc/platforms/83xx/Makefile
@@ -2,3 +2,4 @@
# Makefile for the PowerPC 83xx linux kernel.
#
obj-$(CONFIG_MPC834x_SYS) += mpc834x_sys.o
+obj-$(CONFIG_TQM834x) += tqm834x.o
diff --git a/arch/ppc/platforms/83xx/tqm834x.c b/arch/ppc/platforms/83xx/tqm834x.c
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/83xx/tqm834x.c
@@ -0,0 +1,336 @@
+/*
+ * arch/ppc/platforms/83xx/tqm834x.c
+ *
+ * TQ Components TQM834x board routines
+ *
+ * Copyright 2005 DENX Software Engineering
+ * Derived from mpc834x_sys.c
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ */
+
+#include <linux/config.h>
+#include <linux/stddef.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/errno.h>
+#include <linux/reboot.h>
+#include <linux/pci.h>
+#include <linux/kdev_t.h>
+#include <linux/major.h>
+#include <linux/console.h>
+#include <linux/delay.h>
+#include <linux/seq_file.h>
+#include <linux/root_dev.h>
+#include <linux/serial.h>
+#include <linux/tty.h> /* for linux/serial_core.h */
+#include <linux/serial_core.h>
+#include <linux/initrd.h>
+#include <linux/module.h>
+#include <linux/fsl_devices.h>
+
+#include <asm/system.h>
+#include <asm/pgtable.h>
+#include <asm/page.h>
+#include <asm/atomic.h>
+#include <asm/time.h>
+#include <asm/io.h>
+#include <asm/machdep.h>
+#include <asm/ipic.h>
+#include <asm/bootinfo.h>
+#include <asm/pci-bridge.h>
+#include <asm/mpc83xx.h>
+#include <asm/irq.h>
+#include <asm/kgdb.h>
+#include <asm/ppc_sys.h>
+#include <mm/mmu_decl.h>
+
+#include <syslib/ppc83xx_setup.h>
+
+#ifndef CONFIG_PCI
+unsigned long isa_io_base = 0;
+unsigned long isa_mem_base = 0;
+#endif
+
+extern unsigned long total_memory; /* in mm/init */
+
+unsigned char __res[sizeof (bd_t)];
+
+#ifdef CONFIG_PCI
+int
+mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
+{
+ static char pci_irq_table[][4] =
+ /*
+ * PCI IDSEL/INTPIN->INTLINE
+ * A B C D
+ */
+ {
+ {PIRQA, PIRQB, PIRQC, PIRQD}, /* idsel 0x11 */
+ {PIRQC, PIRQD, PIRQA, PIRQB}, /* idsel 0x12 */
+ {PIRQD, PIRQA, PIRQB, PIRQC} /* idsel 0x13 */
+ };
+
+ const long min_idsel = 0x11, max_idsel = 0x13, irqs_per_slot = 4;
+ return PCI_IRQ_TABLE_LOOKUP;
+}
+
+int
+mpc83xx_exclude_device(u_char bus, u_char devfn)
+{
+ return PCIBIOS_SUCCESSFUL;
+}
+#endif /* CONFIG_PCI */
+
+/* ************************************************************************
+ *
+ * Setup the architecture
+ *
+ */
+static void __init
+tqm834x_setup_arch(void)
+{
+ bd_t *binfo = (bd_t *) __res;
+ unsigned int freq;
+ struct gianfar_platform_data *pdata;
+
+ /* get the core frequency */
+ freq = binfo->bi_intfreq;
+
+ /* Set loops_per_jiffy to a half-way reasonable value,
+ for use until calibrate_delay gets called. */
+ loops_per_jiffy = freq / HZ;
+
+#ifdef CONFIG_PCI
+ /* setup PCI host bridges */
+ mpc83xx_setup_hose();
+#endif
+ mpc83xx_early_serial_map();
+
+ /* setup the board related information for the enet controllers */
+ pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC1);
+ if (pdata) {
+ pdata->board_flags = FSL_GIANFAR_BRD_IS_REDUCED;
+ pdata->interruptPHY = MPC83xx_IRQ_EXT1;
+ pdata->phyid = 0;
+ /* fixup phy address */
+ pdata->phy_reg_addr += binfo->bi_immr_base;
+ memcpy(pdata->mac_addr, binfo->bi_enetaddr, 6);
+ }
+
+ pdata = (struct gianfar_platform_data *) ppc_sys_get_pdata(MPC83xx_TSEC2);
+ if (pdata) {
+ pdata->board_flags = FSL_GIANFAR_BRD_IS_REDUCED;
+ pdata->interruptPHY = MPC83xx_IRQ_EXT1;
+ pdata->phyid = 1;
+ /* fixup phy address */
+ pdata->phy_reg_addr += binfo->bi_immr_base;
+ memcpy(pdata->mac_addr, binfo->bi_enet1addr, 6);
+ }
+
+#ifdef CONFIG_BLK_DEV_INITRD
+ if (initrd_start)
+ ROOT_DEV = Root_RAM0;
+ else
+#endif
+#ifdef CONFIG_ROOT_NFS
+ ROOT_DEV = Root_NFS;
+#else
+ ROOT_DEV = Root_HDA1;
+#endif
+}
+
+static void __init
+tqm834x_map_io(void)
+{
+ /* we steal the lowest ioremap addr for virt space */
+ io_block_mapping(VIRT_IMMRBAR, immrbar, 1024*1024, _PAGE_IO);
+}
+
+int
+tqm834x_show_cpuinfo(struct seq_file *m)
+{
+ uint pvid, svid, phid1;
+ bd_t *binfo = (bd_t *) __res;
+ unsigned int freq;
+
+ /* get the core frequency */
+ freq = binfo->bi_intfreq;
+
+ pvid = mfspr(SPRN_PVR);
+ svid = mfspr(SPRN_SVR);
+
+ seq_printf(m, "Vendor\t\t: Freescale Inc.\n");
+ seq_printf(m, "Machine\t\t: TQM%s\n", cur_ppc_sys_spec->ppc_sys_name);
+ seq_printf(m, "core clock\t: %d MHz\n"
+ "bus clock\t: %d MHz\n",
+ (int)(binfo->bi_intfreq / 1000000),
+ (int)(binfo->bi_busfreq / 1000000));
+ seq_printf(m, "PVR\t\t: 0x%x\n", pvid);
+ seq_printf(m, "SVR\t\t: 0x%x\n", svid);
+
+ /* Display cpu Pll setting */
+ phid1 = mfspr(SPRN_HID1);
+ seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f));
+
+ /* Display the amount of memory */
+ seq_printf(m, "Memory\t\t: %d MB\n", (int)(binfo->bi_memsize / (1024 * 1024)));
+
+ return 0;
+}
+
+void __init
+tqm834x_init_IRQ(void)
+{
+ bd_t *binfo = (bd_t *) __res;
+
+ u8 senses[8] = {
+ 0, /* EXT 0 */
+ 0, /* EXT 1 */
+ 0, /* EXT 2 */
+ 0, /* EXT 3 */
+#ifdef CONFIG_PCI
+ IRQ_SENSE_LEVEL, /* EXT 4 */
+ IRQ_SENSE_LEVEL, /* EXT 5 */
+ IRQ_SENSE_LEVEL, /* EXT 6 */
+ IRQ_SENSE_LEVEL, /* EXT 7 */
+#else
+ 0, /* EXT 4 */
+ 0, /* EXT 5 */
+ 0, /* EXT 6 */
+ 0, /* EXT 7 */
+#endif
+ };
+
+ ipic_init(binfo->bi_immr_base + 0x00700, 0, MPC83xx_IPIC_IRQ_OFFSET, senses, 8);
+
+ /* Initialize the default interrupt mapping priorities,
+ * in case the boot rom changed something on us.
+ */
+ ipic_set_default_priority();
+}
+
+#if defined(CONFIG_I2C_MPC) && defined(CONFIG_SENSORS_DS1337)
+extern ulong ds1337_get_rtc_time(void);
+extern int ds1337_set_rtc_time(unsigned long nowtime);
+
+static int __init
+tqm834x_rtc_hookup(void)
+{
+ struct timespec tv;
+
+ ppc_md.set_rtc_time = ds1337_set_rtc_time;
+ ppc_md.get_rtc_time = ds1337_get_rtc_time;
+
+ tv.tv_nsec = 0;
+ tv.tv_sec = (ppc_md.get_rtc_time)();
+ do_settimeofday(&tv);
+
+ return 0;
+}
+late_initcall(tqm834x_rtc_hookup);
+#endif
+
+static __inline__ void
+tqm834x_set_bat(void)
+{
+ /* we steal the lowest ioremap addr for virt space */
+ mb();
+ mtspr(SPRN_DBAT1U, VIRT_IMMRBAR | 0x1e);
+ mtspr(SPRN_DBAT1L, immrbar | 0x2a);
+ mb();
+}
+
+void __init
+platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
+ unsigned long r6, unsigned long r7)
+{
+ bd_t *binfo = (bd_t *) __res;
+
+ /* parse_bootinfo must always be called first */
+ parse_bootinfo(find_bootinfo());
+
+ /*
+ * If we were passed in a board information, copy it into the
+ * residual data area.
+ */
+ if (r3) {
+ memcpy((void *) __res, (void *) (r3 + KERNELBASE),
+ sizeof (bd_t));
+ }
+
+#if defined(CONFIG_BLK_DEV_INITRD)
+ /*
+ * If the init RAM disk has been configured in, and there's a valid
+ * starting address for it, set it up.
+ */
+ if (r4) {
+ initrd_start = r4 + KERNELBASE;
+ initrd_end = r5 + KERNELBASE;
+ }
+#endif /* CONFIG_BLK_DEV_INITRD */
+
+ /* Copy the kernel command line arguments to a safe place. */
+ if (r6) {
+ *(char *) (r7 + KERNELBASE) = 0;
+ strcpy(cmd_line, (char *) (r6 + KERNELBASE));
+ }
+
+ immrbar = binfo->bi_immr_base;
+
+ tqm834x_set_bat();
+
+#if defined(CONFIG_SERIAL_8250) && defined(CONFIG_SERIAL_TEXT_DEBUG)
+ {
+ struct uart_port p;
+
+ memset(&p, 0, sizeof (p));
+ p.iotype = SERIAL_IO_MEM;
+ p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4500);
+ p.uartclk = binfo->bi_busfreq;
+
+ gen550_init(0, &p);
+
+ memset(&p, 0, sizeof (p));
+ p.iotype = SERIAL_IO_MEM;
+ p.membase = (unsigned char __iomem *)(VIRT_IMMRBAR + 0x4600);
+ p.uartclk = binfo->bi_busfreq;
+
+ gen550_init(1, &p);
+ }
+#endif
+
+ identify_ppc_sys_by_id(mfspr(SPRN_SVR));
+
+ /* setup the PowerPC module struct */
+ ppc_md.setup_arch = tqm834x_setup_arch;
+ ppc_md.show_cpuinfo = tqm834x_show_cpuinfo;
+
+ ppc_md.init_IRQ = tqm834x_init_IRQ;
+ ppc_md.get_irq = ipic_get_irq;
+
+ ppc_md.restart = mpc83xx_restart;
+ ppc_md.power_off = mpc83xx_power_off;
+ ppc_md.halt = mpc83xx_halt;
+
+ ppc_md.find_end_of_memory = mpc83xx_find_end_of_memory;
+ ppc_md.setup_io_mappings = tqm834x_map_io;
+
+ ppc_md.time_init = mpc83xx_time_init;
+ ppc_md.set_rtc_time = NULL;
+ ppc_md.get_rtc_time = NULL;
+ ppc_md.calibrate_decr = mpc83xx_calibrate_decr;
+
+ ppc_md.early_serial_map = mpc83xx_early_serial_map;
+#if defined(CONFIG_SERIAL_8250) && defined(CONFIG_SERIAL_TEXT_DEBUG)
+ ppc_md.progress = gen550_progress;
+#endif /* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
+
+ if (ppc_md.progress)
+ ppc_md.progress("tqm834x_init(): exit", 0);
+
+ return;
+}
diff --git a/arch/ppc/platforms/83xx/tqm834x.h b/arch/ppc/platforms/83xx/tqm834x.h
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/83xx/tqm834x.h
@@ -0,0 +1,40 @@
+/*
+ * arch/ppc/platforms/83xx/tqm834x.h
+ *
+ * TQ Components TQM834x common board definitions
+ *
+ * Copyright 2005 DENX Software Engineering
+ * Derived from mpc834x_sys.h
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.
+ *
+ */
+
+#ifndef __MACH_TQM834X_H__
+#define __MACH_TQM834X_H__
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/seq_file.h>
+#include <syslib/ppc83xx_setup.h>
+#include <asm/ppcboot.h>
+
+#define VIRT_IMMRBAR ((uint)0xfe000000)
+
+#define PIRQA MPC83xx_IRQ_EXT4
+#define PIRQB MPC83xx_IRQ_EXT5
+#define PIRQC MPC83xx_IRQ_EXT6
+#define PIRQD MPC83xx_IRQ_EXT7
+
+#define MPC83xx_PCI1_LOWER_IO 0x00000000
+#define MPC83xx_PCI1_UPPER_IO 0x00ffffff
+#define MPC83xx_PCI1_LOWER_MEM 0x80000000
+#define MPC83xx_PCI1_UPPER_MEM 0x9fffffff
+#define MPC83xx_PCI1_IO_BASE 0xe2000000
+#define MPC83xx_PCI1_MEM_OFFSET 0x00000000
+#define MPC83xx_PCI1_IO_SIZE 0x01000000
+
+#endif /* __MACH_TQM834X_H__ */
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -340,6 +340,14 @@ config MTD_REDWOOD
Redwood board. If you have one of these boards and would like to
use the flash chips on it, say 'Y'.
+config MTD_TQM834x
+ tristate "Flash device mapped on TQ Components TQM834x Boards"
+ depends on MTD_CFI && PPC32 && 83xx && TQM834x
+ help
+ This enables access routines for the flash chips on the
+ TQ Components TQM834x boards. If you have one of these boards
+ and would like to use the flash chips on it, say 'Y'.
+
config MTD_CSTM_MIPS_IXX
tristate "Flash chip mapping on ITE QED-4N-S01B, Globespan IVR or custom board"
depends on MIPS && MTD_CFI && MTD_JEDECPROBE && MTD_PARTITIONS
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -70,3 +70,4 @@ obj-$(CONFIG_MTD_DMV182) += dmv182.o
obj-$(CONFIG_MTD_SHARP_SL) += sharpsl-flash.o
obj-$(CONFIG_MTD_PLATRAM) += plat-ram.o
obj-$(CONFIG_MTD_OMAP_NOR) += omap_nor.o
+obj-$(CONFIG_MTD_TQM834x) += tqm834x.o
diff --git a/drivers/mtd/maps/tqm834x.c b/drivers/mtd/maps/tqm834x.c
new file mode 100644
--- /dev/null
+++ b/drivers/mtd/maps/tqm834x.c
@@ -0,0 +1,298 @@
+/*
+ * drivers/mtd/maps/tqm834x.c
+ *
+ * MTD mapping driver for TQM834x boards
+ *
+ * Copyright 2005 Wolfgang Denk, DENX Software Engineering, <wd@denx.de>.
+ *
+ * This file is licensed under the terms of the GNU General Public License
+ * version 2. This program is licensed "as is" without any warranty of any
+ * kind, whether express or implied.
+ *
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/slab.h>
+#include <asm/io.h>
+#include <asm/ppcboot.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+
+#if 0 /* Debugging turned off */
+# define debugk(fmt,args...) printk(fmt ,##args)
+#else
+# define debugk(fmt,args...)
+#endif
+
+#define FLASH_BANK_MAX 2
+
+extern unsigned char __res[];
+
+/* trivial struct to describe partition information */
+struct mtd_part_def
+{
+ int nums;
+ unsigned char *type;
+ struct mtd_partition* mtd_part;
+};
+
+static struct mtd_info* mtd_banks[FLASH_BANK_MAX];
+static struct map_info* map_banks[FLASH_BANK_MAX];
+static struct mtd_part_def part_banks[FLASH_BANK_MAX];
+
+static unsigned long num_banks;
+static unsigned long start_scan_addr;
+
+#ifdef CONFIG_MTD_PARTITIONS
+/*
+ * The following defines the partition layout of TQM834x boards.
+ *
+ * See include/linux/mtd/partitions.h for definition of the
+ * mtd_partition structure.
+ *
+ * Assume minimal initial size of 4 MiB per bank, will be updated
+ * later in init_tqm834x_mtd() routine.
+ */
+
+/* Partition definition for the first flash bank which is always present. */
+static struct mtd_partition tqm834x_partitions_bank1[] = {
+ {
+ name: "u-boot", /* u-boot firmware */
+ offset: 0x00000000,
+ size: 0x00040000, /* 256 KiB */
+ /*mask_flags: MTD_WRITEABLE, * force read-only */
+ },
+ {
+ name: "env", /* u-boot environment */
+ offset: 0x00040000,
+ size: 0x00020000, /* 128 KiB */
+ /*mask_flags: MTD_WRITEABLE, * force read-only */
+ },
+ {
+ name: "kernel", /* linux kernel image */
+ offset: 0x00060000,
+ size: 0x00100000, /* 1 MiB */
+ /*mask_flags: MTD_WRITEABLE, * force read-only */
+ },
+ {
+ name: "initrd", /* ramdisk image */
+ offset: 0x00160000,
+ size: 0x00200000, /* 2 MiB */
+ },
+ {
+ name: "user", /* user data */
+ offset: 0x00360000,
+ size: 0x000a0000, /* remaining space */
+ /* NOTE: this parttion size is re-calcated in */
+ /* init_tqm834x_mtd() to cover actual remaining space. */
+ },
+};
+
+/* Partition definition for the second flash bank which may be present on some
+ * TQM834x boards.
+ */
+static struct mtd_partition tqm834x_partitions_bank2[] = {
+ {
+ name: "jffs2", /* jffs2 filesystem */
+ offset: 0x00000000,
+ size: 0x00400000, /* whole device */
+ /* NOTE: this parttion size is re-calcated in */
+ /* init_tqm834x_mtd() to cover actual device size. */
+ },
+};
+
+#endif /* CONFIG_MTD_PARTITIONS */
+
+#define NB_OF(x) (sizeof(x)/sizeof(x[0]))
+
+int __init init_tqm834x_mtd(void)
+{
+ int idx = 0, ret = 0;
+ unsigned long flash_addr, flash_size, mtd_size = 0;
+
+ /* pointer to TQM834x board info data */
+ bd_t *bd = (bd_t *)__res;
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+ int n;
+ char mtdid[4];
+ const char *part_probes[] = { "cmdlinepart", NULL };
+#endif
+
+ flash_addr = bd->bi_flashstart;
+ flash_size = bd->bi_flashsize;
+
+ /* request maximum flash size address space */
+ start_scan_addr = (unsigned long)ioremap(flash_addr, flash_size);
+ if (!start_scan_addr) {
+ printk("%s: Failed to ioremap address: 0x%lx\n",
+ __FUNCTION__, flash_addr);
+ return -EIO;
+ }
+
+ for(idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+ if (mtd_size >= flash_size)
+ break;
+
+ debugk ("%s: chip probing count %d\n", __FUNCTION__, idx);
+
+ map_banks[idx] = (struct map_info *)kmalloc(sizeof(struct map_info),
+ GFP_KERNEL);
+ if (map_banks[idx] == NULL) {
+ ret = -ENOMEM;
+ goto error_mem;
+ }
+ memset((void *)map_banks[idx], 0, sizeof(struct map_info));
+ map_banks[idx]->name = (char *)kmalloc(16, GFP_KERNEL);
+ if (map_banks[idx]->name == NULL) {
+ ret = -ENOMEM;
+ goto error_mem;
+ }
+ memset((void *)map_banks[idx]->name, 0, 16);
+
+ sprintf(map_banks[idx]->name, "TQM834x-%d", idx);
+ map_banks[idx]->size = flash_size;
+ map_banks[idx]->bankwidth = 4;
+
+ simple_map_init(map_banks[idx]);
+
+ map_banks[idx]->virt = (void __iomem *)
+ (start_scan_addr + ((idx > 0) ?
+ (mtd_banks[idx-1] ? mtd_banks[idx-1]->size : 0) : 0));
+ map_banks[idx]->phys =
+ flash_addr + ((idx > 0) ?
+ (mtd_banks[idx-1] ? mtd_banks[idx-1]->size : 0) : 0);
+
+ /* start to probe flash chips */
+ mtd_banks[idx] = do_map_probe("cfi_probe", map_banks[idx]);
+ if (mtd_banks[idx]) {
+ mtd_banks[idx]->owner = THIS_MODULE;
+ mtd_size += mtd_banks[idx]->size;
+ num_banks++;
+ debugk ("%s: bank %ld, name: %s, size: %d bytes \n",
+ __FUNCTION__, num_banks,
+ mtd_banks[idx]->name, mtd_banks[idx]->size);
+ }
+ }
+
+ /* no supported flash chips found */
+ if (!num_banks) {
+ printk("TQM834x: No supported flash chips found!\n");
+ ret = -ENXIO;
+ goto error_mem;
+ }
+
+#ifdef CONFIG_MTD_PARTITIONS
+ /*
+ * Select static partition definitions
+ */
+ n = NB_OF(tqm834x_partitions_bank1);
+ part_banks[0].mtd_part = tqm834x_partitions_bank1;
+ part_banks[0].type = "static image bank1";
+ part_banks[0].nums = n;
+
+ /* update last partition size to cover actual remaining space */
+ tqm834x_partitions_bank1[n - 1].size =
+ mtd_banks[0]->size -
+ tqm834x_partitions_bank1[n - 1].offset;
+
+ /* check if we have second bank? */
+ if (num_banks == 2) {
+ n = NB_OF(tqm834x_partitions_bank2);
+ part_banks[1].mtd_part = tqm834x_partitions_bank2;
+ part_banks[1].type = "static image bank2";
+ part_banks[1].nums = n;
+
+ /* update last partition size to cover actual remaining space */
+ tqm834x_partitions_bank2[n - 1].size =
+ mtd_banks[1]->size -
+ tqm834x_partitions_bank2[n - 1].offset;
+ }
+
+ for(idx = 0; idx < num_banks ; idx++) {
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+ sprintf(mtdid, "%d", idx);
+ n = parse_mtd_partitions(mtd_banks[idx],
+ part_probes,
+ &part_banks[idx].mtd_part,
+ 0);
+ debugk ("%s: %d command line partitions on bank %s\n",
+ __FUNCTION__, n, mtdid);
+ if (n > 0) {
+ part_banks[idx].type = "command line";
+ part_banks[idx].nums = n;
+ }
+#endif /* CONFIG_MTD_CMDLINE_PARTS */
+ if (part_banks[idx].nums == 0) {
+ printk (KERN_NOTICE
+ "TQM834x flash bank %d: no partition info "
+ "available, registering whole device\n", idx);
+ add_mtd_device(mtd_banks[idx]);
+ } else {
+ printk (KERN_NOTICE
+ "TQM834x flash bank %d: Using %s partition "
+ "definition\n", idx, part_banks[idx].type);
+ add_mtd_partitions (mtd_banks[idx],
+ part_banks[idx].mtd_part,
+ part_banks[idx].nums);
+ }
+ }
+#else /* ! CONFIG_MTD_PARTITIONS */
+ printk (KERN_NOTICE "TQM834x flash: registering %d flash banks "
+ "at once\n", num_banks);
+
+ for(idx = 0 ; idx < num_banks ; idx++) {
+ add_mtd_device(mtd_banks[idx]);
+ }
+#endif /* CONFIG_MTD_PARTITIONS */
+
+ return 0;
+error_mem:
+ for (idx = 0 ; idx < FLASH_BANK_MAX ; idx++) {
+ if (map_banks[idx] != NULL) {
+ if (map_banks[idx]->name != NULL) {
+ kfree(map_banks[idx]->name);
+ map_banks[idx]->name = NULL;
+ }
+ kfree(map_banks[idx]);
+ map_banks[idx] = NULL;
+ }
+ }
+
+ iounmap((void *)start_scan_addr);
+
+ return ret;
+}
+
+static void __exit cleanup_tqm834x_mtd(void)
+{
+ unsigned int idx = 0;
+ for(idx = 0 ; idx < num_banks ; idx++) {
+ /* destroy mtd_info previously allocated */
+ if (mtd_banks[idx]) {
+ del_mtd_partitions(mtd_banks[idx]);
+ map_destroy(mtd_banks[idx]);
+ }
+
+ /* release map_info not used anymore */
+ kfree(map_banks[idx]->name);
+ kfree(map_banks[idx]);
+ }
+
+ if (start_scan_addr) {
+ iounmap((void *)start_scan_addr);
+ start_scan_addr = 0;
+ }
+}
+
+module_init(init_tqm834x_mtd);
+module_exit(cleanup_tqm834x_mtd);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Wolfgang Denk <wd@denx.de>");
+MODULE_DESCRIPTION("MTD map driver for TQM834x boards");
diff --git a/include/asm-ppc/mpc83xx.h b/include/asm-ppc/mpc83xx.h
--- a/include/asm-ppc/mpc83xx.h
+++ b/include/asm-ppc/mpc83xx.h
@@ -26,6 +26,10 @@
#include <platforms/83xx/mpc834x_sys.h>
#endif
+#ifdef CONFIG_TQM834x
+#include <platforms/83xx/tqm834x.h>
+#endif
+
#define _IO_BASE isa_io_base
#define _ISA_MEM_BASE isa_mem_base
#ifdef CONFIG_PCI
^ permalink raw reply
* [PATCH 2.6] Add generic support for DS1377 RTC
From: Wolfgang Denk @ 2005-10-22 21:05 UTC (permalink / raw)
To: linuxppc-dev; +Cc: lm-sensors
The following patch (against current Linux 2.6 tree) moves generic
DS1377 RTC support from the "radstone_ppc7d" platform specific file
to it's proper place ("drivers/i2c/chips/ds1337.c") and makes it thus
common and available for other boards too.
---
Add common ds1337_get_rtc_time() and ds1337_set_rtc_time() routines.
Derived from radstone platform specific code.
Fix BIN2BCD month conversion.
Signed-off-by: Marian Balakowicz <m8@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
---
commit 80387b45146a9e397c1fec1138f3eb3884c42ed8
tree 690680af98e271f64025a49c30b1bfcb5b5c465c
parent d85b5d8b85163f43dd2d7d62dbd3db630cbe2663
author Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:32:28 +0200
committer Marian Balakowicz <m8@semihalf.com> Tue, 18 Oct 2005 18:32:28 +0200
arch/ppc/platforms/radstone_ppc7d.c | 48 ++++++++---------------------------
drivers/i2c/chips/ds1337.c | 44 +++++++++++++++++++++++++++++++-
2 files changed, 53 insertions(+), 39 deletions(-)
diff --git a/arch/ppc/platforms/radstone_ppc7d.c b/arch/ppc/platforms/radstone_ppc7d.c
--- a/arch/ppc/platforms/radstone_ppc7d.c
+++ b/arch/ppc/platforms/radstone_ppc7d.c
@@ -1,6 +1,11 @@
/*
* arch/ppc/platforms/radstone_ppc7d.c
*
+ * Copyright 2005 DENX Software Engineering
+ * ppc7d_get_rtc_time(), ppc7d_set_rtc_time() renamed
+ * to generic ds1337_get_rtc_time() and ds1337_set_rtc_time()
+ * and moved to ds1337.c
+ *
* Board setup routines for the Radstone PPC7D boards.
*
* Author: James Chapman <jchapman@katalix.com>
@@ -74,10 +79,10 @@ static int ppc7d_has_alma;
extern void gen550_progress(char *, unsigned short);
extern void gen550_init(int, struct uart_port *);
-/* FIXME - move to h file */
-extern int ds1337_do_command(int id, int cmd, void *arg);
-#define DS1337_GET_DATE 0
-#define DS1337_SET_DATE 1
+/* Real Time Clock support.
+ * PPC7D has a DS1337 accessed by I2C. */
+extern ulong ds1337_get_rtc_time(void);
+extern int ds1337_set_rtc_time(unsigned long nowtime);
/* residual data */
unsigned char __res[sizeof(bd_t)];
@@ -1249,37 +1254,6 @@ static void __init ppc7d_setup_arch(void
}
-/* Real Time Clock support.
- * PPC7D has a DS1337 accessed by I2C.
- */
-static ulong ppc7d_get_rtc_time(void)
-{
- struct rtc_time tm;
- int result;
-
- spin_lock(&rtc_lock);
- result = ds1337_do_command(0, DS1337_GET_DATE, &tm);
- spin_unlock(&rtc_lock);
-
- if (result == 0)
- result = mktime(tm.tm_year, tm.tm_mon, tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
-
- return result;
-}
-
-static int ppc7d_set_rtc_time(unsigned long nowtime)
-{
- struct rtc_time tm;
- int result;
-
- spin_lock(&rtc_lock);
- to_tm(nowtime, &tm);
- result = ds1337_do_command(0, DS1337_SET_DATE, &tm);
- spin_unlock(&rtc_lock);
-
- return result;
-}
-
/* This kernel command line parameter can be used to have the target
* wait for a JTAG debugger to attach. Of course, a JTAG debugger
* with hardware breakpoint support can have the target stop at any
@@ -1336,8 +1310,8 @@ static void ppc7d_init2(void)
outb(data8, PPC7D_CPLD_LEDS);
/* Hook up RTC. We couldn't do this earlier because we need the I2C subsystem */
- ppc_md.set_rtc_time = ppc7d_set_rtc_time;
- ppc_md.get_rtc_time = ppc7d_get_rtc_time;
+ ppc_md.set_rtc_time = ds1337_set_rtc_time;
+ ppc_md.get_rtc_time = ds1337_get_rtc_time;
pr_debug("%s: exit\n", __FUNCTION__);
}
diff --git a/drivers/i2c/chips/ds1337.c b/drivers/i2c/chips/ds1337.c
--- a/drivers/i2c/chips/ds1337.c
+++ b/drivers/i2c/chips/ds1337.c
@@ -1,6 +1,10 @@
/*
* linux/drivers/i2c/chips/ds1337.c
*
+ * Copyright 2005 DENX Software Engineering
+ * Added ds1337_get_rtc_time and ds1337_set_rtc_time routines.
+ * Based on radstone platform specific code.
+ *
* Copyright (C) 2005 James Chapman <jchapman@katalix.com>
*
* based on linux/drivers/acorn/char/pcf8583.c
@@ -21,6 +25,7 @@
#include <linux/rtc.h> /* get the user-level API */
#include <linux/bcd.h>
#include <linux/list.h>
+#include <asm/time.h>
/* Device registers */
#define DS1337_REG_HOUR 2
@@ -34,6 +39,8 @@
#define DS1337_GET_DATE 0
#define DS1337_SET_DATE 1
+extern spinlock_t rtc_lock;
+
/*
* Functions declaration
*/
@@ -164,9 +171,9 @@ static int ds1337_set_datetime(struct i2
buf[1] = BIN2BCD(dt->tm_sec);
buf[2] = BIN2BCD(dt->tm_min);
buf[3] = BIN2BCD(dt->tm_hour);
- buf[4] = BIN2BCD(dt->tm_wday) + 1;
+ buf[4] = BIN2BCD(dt->tm_wday + 1);
buf[5] = BIN2BCD(dt->tm_mday);
- buf[6] = BIN2BCD(dt->tm_mon) + 1;
+ buf[6] = BIN2BCD(dt->tm_mon + 1);
val = dt->tm_year;
if (val >= 100) {
val -= 100;
@@ -223,6 +230,37 @@ int ds1337_do_command(int bus, int cmd,
return -ENODEV;
}
+ulong ds1337_get_rtc_time(void)
+{
+ struct rtc_time tm;
+ int result;
+
+ spin_lock(&rtc_lock);
+ result = ds1337_do_command(0, DS1337_GET_DATE, &tm);
+ spin_unlock(&rtc_lock);
+
+ if (result == 0)
+ result = mktime(tm.tm_year + 1900, tm.tm_mon + 1,
+ tm.tm_mday, tm.tm_hour, tm.tm_min, tm.tm_sec);
+
+ return result;
+}
+
+int ds1337_set_rtc_time(unsigned long nowtime)
+{
+ struct rtc_time tm;
+ int result;
+
+ spin_lock(&rtc_lock);
+ to_tm(nowtime, &tm);
+ tm.tm_year -= 1900;
+ tm.tm_mon -= 1;
+ result = ds1337_do_command(0, DS1337_SET_DATE, &tm);
+ spin_unlock(&rtc_lock);
+
+ return result;
+}
+
static int ds1337_attach_adapter(struct i2c_adapter *adapter)
{
return i2c_probe(adapter, &addr_data, ds1337_detect);
@@ -375,6 +413,8 @@ MODULE_DESCRIPTION("DS1337 RTC driver");
MODULE_LICENSE("GPL");
EXPORT_SYMBOL_GPL(ds1337_do_command);
+EXPORT_SYMBOL_GPL(ds1337_get_rtc_time);
+EXPORT_SYMBOL_GPL(ds1337_set_rtc_time);
module_init(ds1337_init);
module_exit(ds1337_exit);
\f
!-------------------------------------------------------------flip-
^ permalink raw reply
* Add PCI support for TQM834x Boards
From: Wolfgang Denk @ 2005-10-22 22:36 UTC (permalink / raw)
To: linuxppc-dev
The following patch (against latest 2.6 tree) adds PCI support for
the TQ Systems TQM834x Boards. Verified on TQM8349L.
Note: for TQM834x board support actually to compile and work, three
previously submitted patches are required. See postings:
Sat, 22 Oct 2005 [PATCH 2.6] Add generic support for DS1377 RTC
Sat, 22 Oct 2005 [PATCH] Cleanup mpc83xx_restart() code
Sat, 22 Oct 2005 [Patch] Add support for TQM834x Boards
---
PCI support for the TQM834x boards.
Signed-off-by: Rafal Jaworowski <raj@semihalf.com>
Signed-off-by: Wolfgang Denk <wd@denx.de>
---
commit 5108607a56824e025fda5efe9f68ff310545adb9
tree 4e3b67d3e9f4188f69de9715da68781fb7eebc84
parent 0af38510e829b6d397128269fe194898924ab534
author Rafal Jaworowski <raj@pollux.denx.de> Wed, 19 Oct 2005 12:32:42 +0200
committer Rafal Jaworowski <raj@pollux.denx.de> Wed, 19 Oct 2005 12:32:42 +0200
arch/ppc/platforms/83xx/mpc834x_sys.c | 7 +++
arch/ppc/platforms/83xx/tqm834x.c | 37 ++++++++++-----
arch/ppc/platforms/83xx/tqm834x.h | 10 ++--
arch/ppc/syslib/ppc83xx_pci.h | 41 +++++++++++++++++
arch/ppc/syslib/ppc83xx_setup.c | 79 ++++++++++++++++++++++++++++-----
arch/ppc/syslib/ppc83xx_setup.h | 1
include/linux/pci_ids.h | 10 ++++
7 files changed, 157 insertions(+), 28 deletions(-)
diff --git a/arch/ppc/platforms/83xx/mpc834x_sys.c b/arch/ppc/platforms/83xx/mpc834x_sys.c
--- a/arch/ppc/platforms/83xx/mpc834x_sys.c
+++ b/arch/ppc/platforms/83xx/mpc834x_sys.c
@@ -364,6 +364,13 @@ platform_init(unsigned long r3, unsigned
ppc_md.progress = gen550_progress;
#endif /* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
+#ifdef CONFIG_PCI
+ ppc_md.pci_swizzle = common_swizzle;
+ ppc_md.pci_map_irq = mpc83xx_map_irq;
+ ppc_md.pci_exclude_device = mpc83xx_exclude_device;
+ ppc_md.pcibios_fixup = mpc834x_pcibios_fixup;
+#endif /* CONFIG_PCI */
+
if (ppc_md.progress)
ppc_md.progress("mpc834x_sys_init(): exit", 0);
diff --git a/arch/ppc/platforms/83xx/tqm834x.c b/arch/ppc/platforms/83xx/tqm834x.c
--- a/arch/ppc/platforms/83xx/tqm834x.c
+++ b/arch/ppc/platforms/83xx/tqm834x.c
@@ -61,28 +61,33 @@ unsigned char __res[sizeof (bd_t)];
#ifdef CONFIG_PCI
int
-mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
+tqm834x_map_irq(struct pci_dev *dev, unsigned char idsel, unsigned char pin)
{
+ int irq;
static char pci_irq_table[][4] =
/*
* PCI IDSEL/INTPIN->INTLINE
* A B C D
*/
{
- {PIRQA, PIRQB, PIRQC, PIRQD}, /* idsel 0x11 */
- {PIRQC, PIRQD, PIRQA, PIRQB}, /* idsel 0x12 */
- {PIRQD, PIRQA, PIRQB, PIRQC} /* idsel 0x13 */
+ {PIRQA, PIRQB, PIRQC, PIRQD}, /* idsel 0x1c */
+ {PIRQB, PIRQC, PIRQD, PIRQA}, /* idsel 0x1d */
+ {PIRQC, PIRQD, 0, 0} /* idsel 0x1e */
};
- const long min_idsel = 0x11, max_idsel = 0x13, irqs_per_slot = 4;
- return PCI_IRQ_TABLE_LOOKUP;
+ const long min_idsel = 0x1c, max_idsel = 0x1e, irqs_per_slot = 4;
+ irq = PCI_IRQ_TABLE_LOOKUP;
+ if (!irq)
+ irq = 0;
+ return (irq);
}
int
-mpc83xx_exclude_device(u_char bus, u_char devfn)
+tqm834x_exclude_device(u_char bus, u_char devfn)
{
return PCIBIOS_SUCCESSFUL;
}
+
#endif /* CONFIG_PCI */
/* ************************************************************************
@@ -190,19 +195,20 @@ tqm834x_init_IRQ(void)
u8 senses[8] = {
0, /* EXT 0 */
0, /* EXT 1 */
- 0, /* EXT 2 */
- 0, /* EXT 3 */
#ifdef CONFIG_PCI
- IRQ_SENSE_LEVEL, /* EXT 4 */
+ IRQ_SENSE_LEVEL, /* EXT 2 */
+ IRQ_SENSE_LEVEL, /* EXT 3 */
+ 0, /* EXT 4 */
IRQ_SENSE_LEVEL, /* EXT 5 */
IRQ_SENSE_LEVEL, /* EXT 6 */
- IRQ_SENSE_LEVEL, /* EXT 7 */
#else
+ 0, /* EXT 2 */
+ 0, /* EXT 3 */
0, /* EXT 4 */
0, /* EXT 5 */
0, /* EXT 6 */
- 0, /* EXT 7 */
#endif
+ IRQ_SENSE_LEVEL, /* EXT 7 */
};
ipic_init(binfo->bi_immr_base + 0x00700, 0, MPC83xx_IPIC_IRQ_OFFSET, senses, 8);
@@ -329,6 +335,13 @@ platform_init(unsigned long r3, unsigned
ppc_md.progress = gen550_progress;
#endif /* CONFIG_SERIAL_8250 && CONFIG_SERIAL_TEXT_DEBUG */
+#ifdef CONFIG_PCI
+ ppc_md.pci_swizzle = common_swizzle;
+ ppc_md.pci_map_irq = tqm834x_map_irq;
+ ppc_md.pci_exclude_device = tqm834x_exclude_device;
+ ppc_md.pcibios_fixup = mpc834x_pcibios_fixup;
+#endif /* CONFIG_PCI */
+
if (ppc_md.progress)
ppc_md.progress("tqm834x_init(): exit", 0);
diff --git a/arch/ppc/platforms/83xx/tqm834x.h b/arch/ppc/platforms/83xx/tqm834x.h
--- a/arch/ppc/platforms/83xx/tqm834x.h
+++ b/arch/ppc/platforms/83xx/tqm834x.h
@@ -24,15 +24,15 @@
#define VIRT_IMMRBAR ((uint)0xfe000000)
-#define PIRQA MPC83xx_IRQ_EXT4
-#define PIRQB MPC83xx_IRQ_EXT5
+#define PIRQA MPC83xx_IRQ_EXT2
+#define PIRQB MPC83xx_IRQ_EXT3
#define PIRQC MPC83xx_IRQ_EXT6
-#define PIRQD MPC83xx_IRQ_EXT7
+#define PIRQD MPC83xx_IRQ_EXT5
#define MPC83xx_PCI1_LOWER_IO 0x00000000
#define MPC83xx_PCI1_UPPER_IO 0x00ffffff
-#define MPC83xx_PCI1_LOWER_MEM 0x80000000
-#define MPC83xx_PCI1_UPPER_MEM 0x9fffffff
+#define MPC83xx_PCI1_LOWER_MEM 0xc0000000
+#define MPC83xx_PCI1_UPPER_MEM 0xdfffffff
#define MPC83xx_PCI1_IO_BASE 0xe2000000
#define MPC83xx_PCI1_MEM_OFFSET 0x00000000
#define MPC83xx_PCI1_IO_SIZE 0x01000000
diff --git a/arch/ppc/syslib/ppc83xx_pci.h b/arch/ppc/syslib/ppc83xx_pci.h
--- a/arch/ppc/syslib/ppc83xx_pci.h
+++ b/arch/ppc/syslib/ppc83xx_pci.h
@@ -25,6 +25,47 @@ typedef struct immr_clk {
u32 sccr; /* system clock control Register */
u8 res0[0xF4];
} immr_clk_t;
+#define SPMR_LBIUCM 0x80000000 /* LBIUCM */
+#define SPMR_DDRCM 0x40000000 /* DDRCM */
+#define SPMR_SVCOD 0x30000000 /* SVCOD */
+#define SPMR_SPMF 0x0F000000 /* SPMF */
+#define SPMR_CKID 0x00800000 /* CKID */
+#define SPMR_CKID_SHIFT 23
+#define SPMR_COREPLL 0x007F0000 /* COREPLL */
+#define SPMR_CEVCOD 0x000000C0 /* CEVCOD */
+#define SPMR_CEPDF 0x00000020 /* CEPDF */
+#define SPMR_CEPMF 0x0000001F /* CEPMF */
+
+#define OCCR_PCICOE0 0x80000000 /* PCICOE0 */
+#define OCCR_PCICOE1 0x40000000 /* PCICOE1 */
+#define OCCR_PCICOE2 0x20000000 /* PCICOE2 */
+#define OCCR_PCICOE3 0x10000000 /* PCICOE3 */
+#define OCCR_PCICOE4 0x08000000 /* PCICOE4 */
+#define OCCR_PCICOE5 0x04000000 /* PCICOE5 */
+#define OCCR_PCICOE6 0x02000000 /* PCICOE6 */
+#define OCCR_PCICOE7 0x01000000 /* PCICOE7 */
+#define OCCR_PCICD0 0x00800000 /* PCICD0 */
+#define OCCR_PCICD1 0x00400000 /* PCICD1 */
+#define OCCR_PCICD2 0x00200000 /* PCICD2 */
+#define OCCR_PCICD3 0x00100000 /* PCICD3 */
+#define OCCR_PCICD4 0x00080000 /* PCICD4 */
+#define OCCR_PCICD5 0x00040000 /* PCICD5 */
+#define OCCR_PCICD6 0x00020000 /* PCICD6 */
+#define OCCR_PCICD7 0x00010000 /* PCICD7 */
+#define OCCR_PCI1CR 0x00000002 /* PCI1CR */
+#define OCCR_PCI2CR 0x00000001 /* PCI2CR */
+
+#define SCCR_TSEC1CM 0xc0000000 /* TSEC1CM */
+#define SCCR_TSEC1CM_SHIFT 30
+#define SCCR_TSEC2CM 0x30000000 /* TSEC2CM */
+#define SCCR_TSEC2CM_SHIFT 28
+#define SCCR_ENCCM 0x03000000 /* ENCCM */
+#define SCCR_ENCCM_SHIFT 24
+#define SCCR_USBMPHCM 0x00c00000 /* USBMPHCM */
+#define SCCR_USBMPHCM_SHIFT 22
+#define SCCR_USBDRCM 0x00300000 /* USBDRCM */
+#define SCCR_USBDRCM_SHIFT 20
+#define SCCR_PCICM 0x00010000 /* PCICM */
/*
* Sequencer
diff --git a/arch/ppc/syslib/ppc83xx_setup.c b/arch/ppc/syslib/ppc83xx_setup.c
--- a/arch/ppc/syslib/ppc83xx_setup.c
+++ b/arch/ppc/syslib/ppc83xx_setup.c
@@ -221,6 +221,7 @@ mpc83xx_setup_pci1(struct pci_controller
iounmap(ios);
}
+#ifdef CONFIG_MPC83xx_PCI2
void __init
mpc83xx_setup_pci2(struct pci_controller *hose)
{
@@ -278,8 +279,11 @@ mpc83xx_setup_pci2(struct pci_controller
iounmap(pci_ctrl);
iounmap(ios);
}
+#endif
/*
+ * NOTICE for the MPC83xx SYS Freescale evaluation board:
+ *
* PCI buses can be enabled only if SYS board combinates with PIB
* (Platform IO Board) board which provide 3 PCI slots. There is 2 PCI buses
* and 3 PCI slots, so people must configure the routes between them before
@@ -287,10 +291,6 @@ mpc83xx_setup_pci2(struct pci_controller
* can be accessed via I2C bus 2 and are configured by firmware. Refer to
* Freescale to get more information about firmware configuration.
*/
-
-extern int mpc83xx_exclude_device(u_char bus, u_char devfn);
-extern int mpc83xx_map_irq(struct pci_dev *dev, unsigned char idsel,
- unsigned char pin);
void __init
mpc83xx_setup_hose(void)
{
@@ -306,22 +306,46 @@ mpc83xx_setup_hose(void)
sizeof(immr_clk_t));
/*
- * Configure PCI controller and PCI_CLK_OUTPUT both in 66M mode
+ * Configure PCI_CLK_OUTPUT
*/
val32 = clk->occr;
udelay(2000);
- clk->occr = 0xff000000;
+
+#ifdef CONFIG_TQM834x
+ /*
+ * WARNING! only PCI_CLK_OUTPUT1 is enabled for the TQM834x as this is
+ * the one line actually used for clocking all external PCI devices in
+ * current setup of the STK85xx. Enabling other PCI_CLK_OUTPUT lines
+ * may lead to board's hang for unknown reasons - particularly
+ * PCI_CLK_OUTPUT6 and PCI_CLK_OUTPUT7 are known to hang the board;
+ * this issue is under investigation (18 oct 05)
+ */
+ val32 = OCCR_PCICOE1;
+#else
+ /* enable all PCI_CLK_OUTs */
+ val32 = (OCCR_PCICOE0 | OCCR_PCICOE1 | OCCR_PCICOE2 | OCCR_PCICOE3 \
+ | OCCR_PCICOE4 | OCCR_PCICOE5 | OCCR_PCICOE6 | OCCR_PCICOE7);
+#endif
+ /* set frequency of the PCI and clock outputs for external devicesc
+ * according to system clocking settings */
+ if (clk->spmr & SPMR_CKID) {
+ /* PCI Clock is 1/2 of CONFIG_83XX_CLKIN so need to set up OCCR
+ * fields accordingly */
+ val32 |= (OCCR_PCI1CR | OCCR_PCI2CR);
+
+ val32 |= (OCCR_PCICD0 | OCCR_PCICD1 | OCCR_PCICD2 \
+ | OCCR_PCICD3 | OCCR_PCICD4 | OCCR_PCICD5 \
+ | OCCR_PCICD6 | OCCR_PCICD7);
+ }
+
+ clk->occr = val32;
udelay(2000);
-
iounmap(clk);
hose1 = pcibios_alloc_controller();
if(!hose1)
return;
- ppc_md.pci_swizzle = common_swizzle;
- ppc_md.pci_map_irq = mpc83xx_map_irq;
-
hose1->bus_offset = 0;
hose1->first_busno = 0;
hose1->last_busno = 0xff;
@@ -357,7 +381,6 @@ mpc83xx_setup_hose(void)
MPC83xx_PCI1_UPPER_MEM,
IORESOURCE_MEM, "PCI host bridge 1");
- ppc_md.pci_exclude_device = mpc83xx_exclude_device;
hose1->last_busno = pciauto_bus_scan(hose1, hose1->first_busno);
#ifdef CONFIG_MPC83xx_PCI2
@@ -395,4 +418,38 @@ mpc83xx_setup_hose(void)
hose2->last_busno = pciauto_bus_scan(hose2, hose2->first_busno);
#endif /* CONFIG_MPC83xx_PCI2 */
}
+
+
+void __init
+mpc834x_pcibios_fixup(void)
+{
+ struct pci_dev *dev = NULL;
+ unsigned int class;
+ int i;
+
+ if ((dev = pci_find_device(PCI_VENDOR_ID_FREESCALE,
+ PCI_DEVICE_ID_FREESCALE_MPC8349E, NULL))) {
+ class = dev->class >> 8;
+ if (class == PCI_CLASS_BRIDGE_OTHER) {
+ /*
+ * at least rev 1.1 of the MPC8349E chip has the class
+ * wrongly set in the host/PCI bridge config space
+ * register; this leads to the host/PCI bridge being
+ * treated as a regular client device, trying to assign
+ * PCI resources to it etc.
+ *
+ */
+ dev->class = (PCI_CLASS_BRIDGE_HOST << 8) & ~0xf;
+
+ /* for some odd reasons the host/PCI bridge behaves
+ * like an agent device and would claim PCI mem/io/irq
+ * resources, so we make these resources inactive (i.e.
+ * the bridge will not claim resources from itself)
+ */
+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
+ dev->resource[i].flags = IORESOURCE_UNSET;
+ }
+ }
+
+}
#endif /*CONFIG_PCI*/
diff --git a/arch/ppc/syslib/ppc83xx_setup.h b/arch/ppc/syslib/ppc83xx_setup.h
--- a/arch/ppc/syslib/ppc83xx_setup.h
+++ b/arch/ppc/syslib/ppc83xx_setup.h
@@ -36,6 +36,7 @@ extern void mpc83xx_restart(char *cmd);
extern void mpc83xx_power_off(void);
extern void mpc83xx_halt(void);
extern void mpc83xx_setup_hose(void) __init;
+extern void mpc834x_pcibios_fixup(void);
/* PCI config */
#define PCI1_CFG_ADDR_OFFSET (0x8300)
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2278,6 +2278,16 @@
#define PCI_VENDOR_ID_TDI 0x192E
#define PCI_DEVICE_ID_TDI_EHCI 0x0101
+#define PCI_VENDOR_ID_FREESCALE 0x1957
+#define PCI_DEVICE_ID_FREESCALE_MPC8349E 0x0080
+#define PCI_DEVICE_ID_FREESCALE_MPC8349 0x0081
+#define PCI_DEVICE_ID_FREESCALE_MPC8347E_1 0x0082
+#define PCI_DEVICE_ID_FREESCALE_MPC8347_1 0x0083
+#define PCI_DEVICE_ID_FREESCALE_MPC8347E_2 0x0084
+#define PCI_DEVICE_ID_FREESCALE_MPC8347_2 0x0085
+#define PCI_DEVICE_ID_FREESCALE_MPC8343E 0x0086
+#define PCI_DEVICE_ID_FREESCALE_MPC8343 0x0087
+
#define PCI_VENDOR_ID_SYMPHONY 0x1c1c
#define PCI_DEVICE_ID_SYMPHONY_101 0x0001
\f
!-------------------------------------------------------------flip-
Best regards,
Wolfgang Denk
--
Software Engineering: Embedded and Realtime Systems, Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
The first 90% of a project takes 90% of the time, the last 10% takes
the other 90% of the time.
^ permalink raw reply
* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Brad Boyer @ 2005-10-22 23:03 UTC (permalink / raw)
To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022211906.GA5820@suse.de>
On Sat, Oct 22, 2005 at 11:19:06PM +0200, Olaf Hering wrote:
> On Sat, Oct 22, Brad Boyer wrote:
>
> > I disagree. I think a much better solution would be to change the
> > code to be conditionalized internally on PMU support, rather than
> > having #ifdef CONFIG_PM since the functions being called inside
> > that protection are actually out of the PMU code, not the generic
> > power management system. By doing this, you could for example
> > have a kernel compiled for a 1st gen PCI PowerMac without any
> > extra drivers. In this case, you have CUDA and AWACS, but there
> > is no PMU support and no need for sleep notifiers.
>
> May patch would allow that, you need either CUDA or PMU support.
The problem is not that you need CUDA or PMU support. The real
problem is that if you have CONFIG_PM set and do not have
CONFIG_ADB_PMU set, the pmac sound drivers don't compile because
they have calls into the pmu code protected by #ifdef CONFIG_PM,
which isn't enough to ensure that those symbols actually exist.
That code gets into the kernel only if you have CONFIG_PM and
CONFIG_ADB_PMU both set. Your patch will still fail in the
following case:
CONFIG_PM set
CONFIG_CUDA set
CONFIG_ADB_PMU not set
If you enable either of the pmac sound drivers with this setup,
it will fail to compile with exactly the same error.
Brad Boyer
flar@allandria.com
^ permalink raw reply
* Re: [PATCH] dmasound_pmac depends on pmac specific config options
From: Benjamin Herrenschmidt @ 2005-10-22 23:00 UTC (permalink / raw)
To: Brad Boyer; +Cc: Andrew Morton, linuxppc-dev, Olaf Hering
In-Reply-To: <20051022210122.GA9638@pants.nu>
On Sat, 2005-10-22 at 14:01 -0700, Brad Boyer wrote:
> On Sat, Oct 22, 2005 at 09:46:26PM +0200, Olaf Hering wrote:
> >
> > dmasound_pmac should depend on pmac specific .config options.
> > Since PMAC is always defined, but PMAC wont boot without either
> > CUDA or PMU, one of these options indicates that the kernel is
> > for a PowerMac.
> > CONFIG_PM can be selected unconditionally.
>
> I disagree. I think a much better solution would be to change the
> code to be conditionalized internally on PMU support, rather than
> having #ifdef CONFIG_PM since the functions being called inside
> that protection are actually out of the PMU code, not the generic
> power management system. By doing this, you could for example
> have a kernel compiled for a 1st gen PCI PowerMac without any
> extra drivers. In this case, you have CUDA and AWACS, but there
> is no PMU support and no need for sleep notifiers.
The fix is a longer term issue. dmasound should stop using PMU specific
PM notifiers and those should finally be deprecated. Taht would require
converting dmasound to be a proper macio device, which is a pain, and
while we are at it, finally rewriting dmasound (and/or snd-powermac)
properly which is on my todolist since nobody appears to be up to it.
Ben.
^ permalink raw reply
* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-22 23:05 UTC (permalink / raw)
To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051022213037.GA6097@suse.de>
On Sat, 2005-10-22 at 23:30 +0200, Olaf Hering wrote:
> This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606
>
> Hiding a few pmac specific drivers when ADB is disabled can not hurt:
>
> AGP_UNINORTH exist only on systems with ADB_PMU
No. SMU machines too
> I2C_KEYWEST is used by sound
Same comment. PMU and SMU based machines. Be careful of not breaking
ppc64 here :) I think those changes are definitely not welcome now. Wait
for the big ppc/ppc64 merge that's coming, a lot of stuff will be
consolidated and these will be much easier to do. Also, I'm seriously
considering removing the user setting for "CUDA based machiens" vs. "PMU
based machines". I may instead just enable machine generations
(PowerSurge, PowerStar, Gossamer, Core99, MacRISC2, MacRISC4)
> MACE exists only on systems with ADB_CUDA
Hrm... No old laptop with Mace ? Yah, I think that's ok.
> BMAC exists on old and new Macs
Yah, Cuda and PMU based.
> SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
> SERIAL_PMACZILOG exists on old and new Macs
> BLK_DEV_IDE_PMAC exists on old and new Macs
You missed SMU again...
> APPLE_AIRPORT exist only on systems with ADB_PMU
> FB_CONTROL exists only on old Macs
> FB_PLATINUM exists only on old Macs
> FB_VALKYRIE exists only on old Macs
> FB_CT65550 exists only on old Macs
No, it's on old laptops which are PMU based
Anyway, I'm not fan of this patch at all. We should do that properly in
a different way after the merge.
Ben.
>
> Signed-off-by: Olaf Hering <olh@suse.de>
>
> drivers/char/agp/Kconfig | 2 +-
> drivers/i2c/busses/Kconfig | 2 +-
> drivers/ide/Kconfig | 2 +-
> drivers/net/Kconfig | 4 ++--
> drivers/net/wireless/Kconfig | 2 +-
> drivers/scsi/Kconfig | 4 ++--
> drivers/serial/Kconfig | 2 +-
> drivers/video/Kconfig | 8 ++++----
> 8 files changed, 13 insertions(+), 13 deletions(-)
>
> Index: linux-2.6.14-rc5/drivers/char/agp/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/char/agp/Kconfig
> +++ linux-2.6.14-rc5/drivers/char/agp/Kconfig
> @@ -147,7 +147,7 @@ config AGP_ALPHA_CORE
>
> config AGP_UNINORTH
> tristate "Apple UniNorth & U3 AGP support"
> - depends on AGP && PPC_PMAC
> + depends on AGP && PPC_PMAC && ADB_PMU
> help
> This option gives you AGP support for Apple machines with a
> UniNorth or U3 (Apple G5) bridge.
> Index: linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/i2c/busses/Kconfig
> +++ linux-2.6.14-rc5/drivers/i2c/busses/Kconfig
> @@ -237,7 +237,7 @@ config I2C_IXP2000
>
> config I2C_KEYWEST
> tristate "Powermac Keywest I2C interface"
> - depends on I2C && PPC_PMAC
> + depends on I2C && PPC_PMAC && (ADB_CUDA || ADB_PMU)
> help
> This supports the use of the I2C interface in the combo-I/O
> chip on recent Apple machines. Say Y if you have such a machine.
> Index: linux-2.6.14-rc5/drivers/net/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/net/Kconfig
> +++ linux-2.6.14-rc5/drivers/net/Kconfig
> @@ -178,7 +178,7 @@ source "drivers/net/arm/Kconfig"
>
> config MACE
> tristate "MACE (Power Mac ethernet) support"
> - depends on NET_ETHERNET && PPC_PMAC && PPC32
> + depends on NET_ETHERNET && PPC_PMAC && PPC32 && ADB_CUDA
> select CRC32
> help
> Power Macintoshes and clones with Ethernet built-in on the
> @@ -201,7 +201,7 @@ config MACE_AAUI_PORT
>
> config BMAC
> tristate "BMAC (G3 ethernet) support"
> - depends on NET_ETHERNET && PPC_PMAC && PPC32
> + depends on NET_ETHERNET && PPC_PMAC && PPC32 && (ADB_CUDA || ADB_PMU)
> select CRC32
> help
> Say Y for support of BMAC Ethernet interfaces. These are used on G3
> Index: linux-2.6.14-rc5/drivers/scsi/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
>
> config SCSI_MESH
> tristate "MESH (Power Mac internal SCSI) support"
> - depends on PPC32 && PPC_PMAC && SCSI
> + depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
> help
> Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
> SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
> @@ -1560,7 +1560,7 @@ config SCSI_MESH_RESET_DELAY_MS
>
> config SCSI_MAC53C94
> tristate "53C94 (Power Mac external SCSI) support"
> - depends on PPC32 && PPC_PMAC && SCSI
> + depends on PPC32 && PPC_PMAC && SCSI && ADB_CUDA
> help
> On Power Macintoshes (and clones) with two SCSI buses, the external
> SCSI bus is usually controlled by a 53C94 SCSI bus adaptor. Older
> Index: linux-2.6.14-rc5/drivers/serial/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/serial/Kconfig
> +++ linux-2.6.14-rc5/drivers/serial/Kconfig
> @@ -651,7 +651,7 @@ config SERIAL_68360
>
> config SERIAL_PMACZILOG
> tristate "PowerMac z85c30 ESCC support"
> - depends on PPC_OF && PPC_PMAC
> + depends on PPC_OF && PPC_PMAC && (ADB_CUDA || ADB_PMU)
> select SERIAL_CORE
> help
> This driver supports the Zilog z85C30 serial ports found on
> Index: linux-2.6.14-rc5/drivers/ide/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/ide/Kconfig
> +++ linux-2.6.14-rc5/drivers/ide/Kconfig
> @@ -744,7 +744,7 @@ endif
>
> config BLK_DEV_IDE_PMAC
> bool "Builtin PowerMac IDE support"
> - depends on PPC_PMAC && IDE=y
> + depends on PPC_PMAC && IDE=y && (ADB_CUDA || ADB_PMU)
> help
> This driver provides support for the built-in IDE controller on
> most of the recent Apple Power Macintoshes and PowerBooks.
> Index: linux-2.6.14-rc5/drivers/net/wireless/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/net/wireless/Kconfig
> +++ linux-2.6.14-rc5/drivers/net/wireless/Kconfig
> @@ -281,7 +281,7 @@ config HERMES
>
> config APPLE_AIRPORT
> tristate "Apple Airport support (built-in)"
> - depends on PPC_PMAC && HERMES
> + depends on PPC_PMAC && HERMES && ADB_PMU
> help
> Say Y here to support the Airport 802.11b wireless Ethernet hardware
> built into the Macintosh iBook and other recent PowerPC-based
> Index: linux-2.6.14-rc5/drivers/video/Kconfig
> ===================================================================
> --- linux-2.6.14-rc5.orig/drivers/video/Kconfig
> +++ linux-2.6.14-rc5/drivers/video/Kconfig
> @@ -359,7 +359,7 @@ config FB_OF
>
> config FB_CONTROL
> bool "Apple \"control\" display support"
> - depends on (FB = y) && PPC_PMAC
> + depends on (FB = y) && PPC_PMAC && ADB_CUDA
> select FB_CFB_FILLRECT
> select FB_CFB_COPYAREA
> select FB_CFB_IMAGEBLIT
> @@ -371,7 +371,7 @@ config FB_CONTROL
>
> config FB_PLATINUM
> bool "Apple \"platinum\" display support"
> - depends on (FB = y) && PPC_PMAC
> + depends on (FB = y) && PPC_PMAC && ADB_CUDA
> select FB_CFB_FILLRECT
> select FB_CFB_COPYAREA
> select FB_CFB_IMAGEBLIT
> @@ -383,7 +383,7 @@ config FB_PLATINUM
>
> config FB_VALKYRIE
> bool "Apple \"valkyrie\" display support"
> - depends on (FB = y) && (MAC || PPC_PMAC)
> + depends on (FB = y) && (MAC || (PPC_PMAC && ADB_CUDA))
> select FB_CFB_FILLRECT
> select FB_CFB_COPYAREA
> select FB_CFB_IMAGEBLIT
> @@ -395,7 +395,7 @@ config FB_VALKYRIE
>
> config FB_CT65550
> bool "Chips 65550 display support"
> - depends on (FB = y) && PPC
> + depends on (FB = y) && PPC_PMAC && ADB_CUDA
> select FB_CFB_FILLRECT
> select FB_CFB_COPYAREA
> select FB_CFB_IMAGEBLIT
^ permalink raw reply
* Re: [PATCH][RFT] Extended BAT features, take 2
From: Paul Mackerras @ 2005-10-23 0:39 UTC (permalink / raw)
To: Rupert Eibauer; +Cc: linuxppc-dev
In-Reply-To: <200510221554.03810.rupert@ces.ch>
Rupert Eibauer writes:
> What this patch actually does:
> - Make CONFIG_PHYS_64BIT selectable for the 6xx family
Why? What does this gain us? We still can't use RAM above the 4GB
point AFAICS.
Paul.
^ permalink raw reply
* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Olaf Hering @ 2005-10-23 8:12 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <1130022347.7919.39.camel@gaston>
On Sun, Oct 23, Benjamin Herrenschmidt wrote:
> On Sat, 2005-10-22 at 23:30 +0200, Olaf Hering wrote:
> > This started out as a fix for https://bugzilla.novell.com/show_bug.cgi?id=119606
> >
> > Hiding a few pmac specific drivers when ADB is disabled can not hurt:
> >
> > AGP_UNINORTH exist only on systems with ADB_PMU
>
> No. SMU machines too
arch/ppc64/configs/g5_defconfig has CONFIG_ADB_PMU enabled.
It compiles ok with that option disabled.
Is there a pmu in early G5 models?
--
short story of a lazy sysadmin:
alias appserv=wotan
^ permalink raw reply
* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Geert Uytterhoeven @ 2005-10-23 8:23 UTC (permalink / raw)
To: Olaf Hering; +Cc: Andrew Morton, Linux/PPC Development
In-Reply-To: <20051022213037.GA6097@suse.de>
On Sat, 22 Oct 2005, Olaf Hering wrote:
> SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
And on some CHRP.
> --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
>
> config SCSI_MESH
> tristate "MESH (Power Mac internal SCSI) support"
> - depends on PPC32 && PPC_PMAC && SCSI
> + depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
> help
> Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
> SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
You can no longer enable MESH when compiling for CHRP or when disabling ADB?
It's clearly visible my LongTrail died last year... :-(
Gr{oetje,eeting}s,
Geert
--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds
^ permalink raw reply
* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-23 8:22 UTC (permalink / raw)
To: Olaf Hering; +Cc: Andrew Morton, linuxppc-dev
In-Reply-To: <20051023081240.GA20134@suse.de>
> > No. SMU machines too
>
> arch/ppc64/configs/g5_defconfig has CONFIG_ADB_PMU enabled.
> It compiles ok with that option disabled.
> Is there a pmu in early G5 models?
Yes, but not newer ones and I intend to change the way all those low
level support options are dealt with anyway
Ben.
^ permalink raw reply
* Re: [PATCH] hide pmac specific drivers if CONFIG_ADB is not set
From: Benjamin Herrenschmidt @ 2005-10-23 8:23 UTC (permalink / raw)
To: Geert Uytterhoeven; +Cc: Andrew Morton, Linux/PPC Development, Olaf Hering
In-Reply-To: <Pine.LNX.4.62.0510231021070.16077@numbat.sonytel.be>
On Sun, 2005-10-23 at 10:23 +0200, Geert Uytterhoeven wrote:
> On Sat, 22 Oct 2005, Olaf Hering wrote:
> > SCSI_MESH exists on old Macs, but the PB Lombard has an external connector
>
> And on some CHRP.
>
> > --- linux-2.6.14-rc5.orig/drivers/scsi/Kconfig
> > +++ linux-2.6.14-rc5/drivers/scsi/Kconfig
> > @@ -1529,7 +1529,7 @@ config SCSI_DEBUG
> >
> > config SCSI_MESH
> > tristate "MESH (Power Mac internal SCSI) support"
> > - depends on PPC32 && PPC_PMAC && SCSI
> > + depends on PPC32 && PPC_PMAC && SCSI && (ADB_CUDA || ADB_PMU)
> > help
> > Many Power Macintoshes and clones have a MESH (Macintosh Enhanced
> > SCSI Hardware) SCSI bus adaptor (the 7200 doesn't, but all of the
>
> You can no longer enable MESH when compiling for CHRP or when disabling ADB?
>
> It's clearly visible my LongTrail died last year... :-(
Come on, Geert, I told you back then I was doing that :) You didn't
complain and we figured out nobody around had any of these in working
conditions anymore :)
Ben.
^ permalink raw reply
* Re: [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-23 9:36 UTC (permalink / raw)
To: Paul Mackerras; +Cc: linuxppc-dev
In-Reply-To: <17242.56232.293762.303684@cargo.ozlabs.ibm.com>
On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> Rupert Eibauer writes:
>
> > What this patch actually does:
> > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
>
> Why? What does this gain us?
I have I/O resources there which are not reachable in 32 bit mode.
> We still can't use RAM above the 4GB point AFAICS.
Does this mean the page tables do not support 63 bit?
Rupert
^ permalink raw reply
* Re: [PATCH][RFT] Extended BAT features, take 2
From: Benjamin Herrenschmidt @ 2005-10-23 9:55 UTC (permalink / raw)
To: Rupert Eibauer; +Cc: linuxppc-dev
In-Reply-To: <200510231136.51548.rupert@ces.ch>
On Sun, 2005-10-23 at 11:36 +0200, Rupert Eibauer wrote:
> On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> > Rupert Eibauer writes:
> >
> > > What this patch actually does:
> > > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
> >
> > Why? What does this gain us?
>
> I have I/O resources there which are not reachable in 32 bit mode.
>
> > We still can't use RAM above the 4GB point AFAICS.
>
> Does this mean the page tables do not support 63 bit?
Not with the current code. At least not for those CPUs.
Ben.
^ permalink raw reply
* Re: [PATCH][RFT] Extended BAT features, take 2
From: Rupert Eibauer @ 2005-10-23 11:03 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1130061332.7919.63.camel@gaston>
On Sunday 23 October 2005 11:55, Benjamin Herrenschmidt wrote:
> On Sun, 2005-10-23 at 11:36 +0200, Rupert Eibauer wrote:
> > On Sunday 23 October 2005 02:39, Paul Mackerras wrote:
> > > Rupert Eibauer writes:
> > >
> > > > What this patch actually does:
> > > > - Make CONFIG_PHYS_64BIT selectable for the 6xx family
> > >
> > > Why? What does this gain us?
> >
> > I have I/O resources there which are not reachable in 32 bit mode.
> >
> > > We still can't use RAM above the 4GB point AFAICS.
> >
> > Does this mean the page tables do not support 63 bit?
>
> Not with the current code. At least not for those CPUs.
I meant 36 bit, but I think you have guessed correctly what I mean.
CONFIG_PHYS_64BIT should really be named CONFIG_PHYS_36BIT.
I have put some more effort into understanding how the page tables work,
and came to the following patch. Maybe this addition makes my previous
patch more attractive to Paul.
Correctness not guaranted, I cannot test it on my hardware.
Rupert
--- pgtable.h.orig Sun Oct 23 12:18:18 2005
+++ pgtable.h Sun Oct 23 12:36:55 2005
@@ -446,11 +446,23 @@
#define PFN_SHIFT_OFFSET (PAGE_SHIFT)
#endif
-#define pte_pfn(x) (pte_val(x) >> PFN_SHIFT_OFFSET)
+#if !defined(CONFIG_PTE_64BIT) && defined(CONFIG_PHYS_64BIT)
+#define pfn_36bit_pte_bits(pfn) ((pfn >> (32 - 2 - PAGE_SHIFT) & 4) |\
+ ((pfn >> (33 - 9 - PAGE_SHIFT)) & 0xe00))
+
+#define pte_36bit_pfn_bits(pte_val) ((((pte) & 4) << (32 - 2 - PAGE_SHIFT) |\
+ (((pte) & 0xe00) << (33 - 9 - PAGE_SHIFT))
+#else
+#define pfn_36bit_pte_bits(pfn) 0
+#define pte_36bit_pfn_bits(pte_val) 0
+#endif
+
+#define pte_pfn(x) ((pte_val(x) >> PFN_SHIFT_OFFSET) | \
+ ((get_highbits_36(pte_val(x))) << (32 - PAGE_SHIFT)))
#define pte_page(x) pfn_to_page(pte_pfn(x))
#define pfn_pte(pfn, prot) __pte(((pte_basic_t)(pfn) << PFN_SHIFT_OFFSET) |\
- pgprot_val(prot))
+ pgprot_val(prot) | pfn_36bit_pte_bits(pfn))
#define mk_pte(page, prot) pfn_pte(page_to_pfn(page), prot)
/*
^ permalink raw reply
* Re: Newbie... in mailing lists...
From: David Woodhouse @ 2005-10-23 11:38 UTC (permalink / raw)
To: Nathael PAJANI; +Cc: linuxppc-embedded
In-Reply-To: <1129621982.3830.310.camel@baythorne.infradead.org>
On Tue, 2005-10-18 at 08:53 +0100, David Woodhouse wrote:
> That's a problem with the archives; it's not your fault. If you look
> at the mailto: link at the top of that page, you see it looks like
> this:
>
> mailto:linuxppc-embedded%40ozlabs.org?Subject=eldk%203.1.1%20ramdisk%20image%20problem&In-Reply-To=
>
> Although it _attempts_ to set the In-Reply-To: header which would make
> your message appear to be a reply to the mail in the archive, it seems
> to be missing the actual message-id of that mail; it's just empty.
I filed this mailman bug along with a partial fix at
https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=171567
--
dwmw2
^ permalink raw reply
page: next (older) | prev (newer) | latest
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox