* Re: powerpc/85xx: Add support for the "socrates" board (MPC8544)
From: Kumar Gala @ 2009-04-01 13:27 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: linuxppc-dev, Scott Wood
In-Reply-To: <49D367C7.5010802@grandegger.com>
On Apr 1, 2009, at 8:10 AM, Wolfgang Grandegger wrote:
> Grant Likely wrote:
>> On Wed, Apr 1, 2009 at 1:36 AM, Wolfgang Grandegger <wg@grandegger.com
>> > wrote:
>>> Anton Vorontsov wrote:
>>>> On Tue, Mar 31, 2009 at 09:05:28AM -0600, Grant Likely wrote:
>>>> [...]
>>>>>>>>>> + soc8544@e0000000 {
>>>>>>>>>> + #address-cells = <1>;
>>>>>>>>>> + #size-cells = <1>;
>>>>>>>>>> + device_type = "soc";
>>>>>>>>> Drop device_type here too.
>>>>>>>> Grrr, I just realized that removing the devices type "soc"
>>>>>>>> has broken
>>>>>>>> fsl_get_sys_freq(). See:
>>>>>>>>
>>>>>>>> http://lxr.linux.no/linux+v2.6.29/arch/powerpc/sysdev/fsl_soc.c#L80
>>>>>>>>
>>>>>>>> We need a quick fix and we could take the occasion to
>>>>>>>> establish a common
>>>>>>>> function for the MPC52xx as well, but it's not obvious to me
>>>>>>>> how to find
>>>>>>>> the SOC node without the device type property.
>>>>>>> SoC node should have a compatible property, just like
>>>>>>> everything else.
>>>>>>>
>>>>>>> compatible = "fsl,mpc8544-immr"; (immr == Internally Memory
>>>>>>> Mapped Registers)
>>>>>>>
>>>>>>> Many other boards already do this.
>>>>>> Yes, it does, but searching for the SOC node is not straight-
>>>>>> forward
>>>>>> because there is no common compatibility string but many CPU-
>>>>>> specific
>>>>>> compatibility strings, e.g. "fsl,mpc8560-immr", etc. Have I
>>>>>> missed
>>>>>> something?
>>>>> Choose a new value ("fsl,mpc-immr" perhaps?), document exactly
>>>>> what it
>>>>> means, and add add it to the end of the compatible list.
>>>> As Scott Wood once pointed out, IMMR does not exists for MPC85xx
>>>> parts. There it's called CCSR.
>>>>
>>>> See this thread:
>>>>
>>>> http://www.mail-archive.com/linuxppc-dev@ozlabs.org/msg12665.html
>>>>
>>>> I still think that
>>>> "fsl,mpc83NN-immr", "fsl,soc", "simple-bus" for 83xx
>>>> and
>>>> "fsl,mpc85NN-ccsr", "fsl,soc", "simple-bus" for 85xx
>>>>
>>>> would be OK, at least to start with. We can always deprecate
>>>> "fsl,soc"
>>>> compatible in favour of something more elegant, but "fsl,soc"
>>>> should be
>>>> just fine to replace device_type = "soc".
>>>>
>>>> Also, there is another good thing about "fsl,soc" -- U-Boot already
>>>> finds it for 83xx CPUs. ;-)
>>> Ugh! I just realize the full impact of removing device type "soc".
>>> It
>>> will break compatibility with U-Boot for many boards. Is it worth
>>> it?
>>
>> Yes, I know this. I'm not asking you to fix all the other boards,
>> but
>> make sure that it is not required for the new board.
>
> Hm, I'm confused, if we want to fix this issue we need first to
>
> - fix all functions in fsl_soc.c searching for the compatible string
> "fsl,soc" instead of the device type "soc" (or both for backward
> compatibility).
>
> - fix U-Boot to find the SOC node by looking for "fsl,soc" to insert
> the
> proper bus-frequency, at least.
>
> That affects *all* boards using CONFIG_FSL_SOC and requires an
> up-to-date version of U-Boot for new kernels :-(. If that is fixed, I
> can remove the "device_type = "soc";" from socrates.dts (and may
> more),
> but not right now. Or have I missed something?
I presume the intent is not to break old u-boots w/new kernels, but to
make it so new .dts don't require device_type = soc in them if using
new kernels.
- k
^ permalink raw reply
* Re: [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable
From: Grant Likely @ 2009-04-01 13:30 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <49D31D1D.6020004@grandegger.com>
On Wed, Apr 1, 2009 at 1:51 AM, Wolfgang Grandegger <wg@grandegger.com> wro=
te:
> Grant Likely wrote:
>> The table definition is more verbose this way, but I think it results
>> in more understandable and easier to extend code. =A0It also adds lets
>> the compiler do more type checking for you.
>
> OK but I don't like the callback function to do the settings. We need
> backward compatibility with old DTS files including the ugly "dfsrr"
> property, right? Then it seems consequent to continue using i2c->flags
> for that purpose and not to introduce another method. If we don't need
> backward compatibility, we could drop the flags completely and just use
> callback functions.
I don't understand why you don't like it. It's an elegant solution
and it simplifies the code somewhat. After grabbing the callback
pointer the compatibility code can simply override it. But I won't
belabor the point or oppose the patch if you stick with the flags
pointer.
>>> --- linux-2.6.orig/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03=
-31 13:25:08.000000000 +0200
>>> +++ linux-2.6/arch/powerpc/platforms/52xx/mpc52xx_common.c =A0 =A0 =A02=
009-03-31 13:28:54.309718526 +0200
>>> +int fsl_i2c_get_fdr(struct device_node *node, u32 i2c_clock, u32 i2c_f=
lags)
>>> +{
>>> [...]
>>> +}
>>> +EXPORT_SYMBOL(fsl_i2c_get_fdr);
>>
>> does not work on a multiplatform kernel. =A0Both 8xxx and 52xx support
>> can be selected at the same time.
>
> OK, then we need different functions including stubs.
I've been thinking about this more. These tables are only ever going
to be used by the i2c_mpc driver and so really they are a part of the
i2c_mpc driver itself. Putting them into common code doesn't make any
sense because it is not common code. I will not merge a patch that
puts them into mpc5200 common code.
g.
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: 8641D with linux 2.6.29 did'n show second cpu
From: Eduard Fuchs @ 2009-04-01 13:36 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <E33D1DD7-FEA1-4B57-99C3-D2CA3BDE77E7@kernel.crashing.org>
Hi,
Am Mittwoch 01 April 2009 06:10:36 schrieb Kumar Gala:
> On Mar 31, 2009, at 10:06 AM, Eduard Fuchs wrote:
> > Hi,
> >
> > Am Dienstag 31 M=E4rz 2009 15:20:21 schrieb Kumar Gala:
> >> On Mar 31, 2009, at 5:15 AM, Eduard Fuchs wrote:
> >>> Hi,
> >>>
> >>> I'm testing the evaluation board from freescale (MPC8641DHPCN) with
> >>> the latest
> >>> linux kernel (2.6.29) and the second core seems disabled. CONFIG_SPM
> >>> is
> >>> enabled but the /proc/cpuinfo shows only one cpu. With original
> >>> 2.6.27 kernel
> >>> both cpu cores appears in /proc/cpuinfo.
> >>>
> >>> Has anyone an idea how can i enable the second core?
> >>
> >> Are you using u-boot? I can't remember if you need a newer u-boot to
> >> deal with changes in how we bring up the second core.
> >
> > Yes. My u-boot version is 2009.03. Are there some additional config
> > keys for
> > SMP support in u-boot?
>
> It appears we introduced a bug in v2009.03 of u-boot.
I never thought that the problem could be in u-boot. I tested the board wit=
h=20
u-boot v2009.01 and it works well.
Best regard
Eduard Fuchs
^ permalink raw reply
* Re: [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable
From: Wolfgang Grandegger @ 2009-04-01 13:41 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <fa686aa40904010630l798528efh465a7543a15f50e5@mail.gmail.com>
Grant Likely wrote:
> On Wed, Apr 1, 2009 at 1:51 AM, Wolfgang Grandegger <wg@grandegger.com> wrote:
>> Grant Likely wrote:
>>> The table definition is more verbose this way, but I think it results
>>> in more understandable and easier to extend code. It also adds lets
>>> the compiler do more type checking for you.
>> OK but I don't like the callback function to do the settings. We need
>> backward compatibility with old DTS files including the ugly "dfsrr"
>> property, right? Then it seems consequent to continue using i2c->flags
>> for that purpose and not to introduce another method. If we don't need
>> backward compatibility, we could drop the flags completely and just use
>> callback functions.
>
> I don't understand why you don't like it. It's an elegant solution
> and it simplifies the code somewhat. After grabbing the callback
> pointer the compatibility code can simply override it. But I won't
> belabor the point or oppose the patch if you stick with the flags
> pointer.
I changed my mind ;-). Have a look to PATCH v2 I sent out a few minutes ago.
>>>> --- linux-2.6.orig/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03-31 13:25:08.000000000 +0200
>>>> +++ linux-2.6/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03-31 13:28:54.309718526 +0200
>>>> +int fsl_i2c_get_fdr(struct device_node *node, u32 i2c_clock, u32 i2c_flags)
>>>> +{
>>>> [...]
>>>> +}
>>>> +EXPORT_SYMBOL(fsl_i2c_get_fdr);
>>> does not work on a multiplatform kernel. Both 8xxx and 52xx support
>>> can be selected at the same time.
>> OK, then we need different functions including stubs.
>
> I've been thinking about this more. These tables are only ever going
> to be used by the i2c_mpc driver and so really they are a part of the
> i2c_mpc driver itself. Putting them into common code doesn't make any
> sense because it is not common code. I will not merge a patch that
> puts them into mpc5200 common code.
It's not common code, I agree. How about putting it into mpc52xx_i2c.c
and use:
$ cat Makefile
obj-$(CONFIG_I2C_MPC) += mpc52xx_i2c.o
Or it could be moved back to the i2c_mpc driver and we add stubs for the
functions to get the bus frequency, or use #ifdef's.
Wolfgang.
^ permalink raw reply
* Re: [PATCH v2] powerpc: i2c-mpc: make I2C bus speed configurable
From: Grant Likely @ 2009-04-01 13:44 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <49D36885.9070806@grandegger.com>
On Wed, Apr 1, 2009 at 7:13 AM, Wolfgang Grandegger <wg@grandegger.com> wro=
te:
> This patch makes the I2C bus speed configurable by using the I2C node
> property "clock-frequency". If the property is not defined, the old
> fixed clock settings will be used for backward compatibility.
>
> The generic I2C clock properties, especially the CPU-specific source
> clock pre-scaler are defined via the OF match table:
>
> =A0static const struct of_device_id mpc_i2c_of_match[] =3D {
> =A0 =A0 =A0 =A0...
> =A0 =A0 =A0 =A0{.compatible =3D "fsl,mpc8543-i2c",
> =A0 =A0 =A0 =A0 .data =3D &(struct fsl_i2c_match_data) {
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.setclock =3D mpc_i2c_setc=
lock_8xxx,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0.prescaler =3D 2,
> =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0},
> =A0 =A0 =A0 =A0},
>
> The "data" field defines the relevant I2C setclock function and the
> relevant prescaler for the I2C source clock frequency.
>
> It uses arch-specific tables and functions to determine resonable
> Freqency Divider Register (fdr) values for MPC83xx, MPC85xx, MPC86xx,
> MPC5200 and MPC5200B.
>
> The i2c->flags field and the corresponding FSL_I2C_DEV_* definitions
> have been removed as they are obsolete.
>
> Furthermore dev_dbg() and dev_info() are now used to profit from a more
> comprehensive output.
>
> Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
> =A0arch/powerpc/include/asm/mpc52xx.h =A0 =A0 =A0 =A0 =A0 =A0 | =A0 11 +
> =A0arch/powerpc/platforms/52xx/mpc52xx_common.c =A0 | =A0 57 ++++++++++
> =A0arch/powerpc/sysdev/fsl_soc.c =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0=
90 ++++++++++++++++
> =A0arch/powerpc/sysdev/fsl_soc.h =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0| =A0=
12 ++
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
I mostly like this patch. However, as I mentioned in my other reply,
I'm going to NAK it because the divisor tables are not common code and
do not belong in common code files.
Other than that, I like this version of the patch and I think it is
almost finished. More comments below.
> -static void mpc_i2c_setclock(struct mpc_i2c *i2c)
> -{
> - =A0 =A0 =A0 /* Set clock and filters */
> - =A0 =A0 =A0 if (i2c->flags & FSL_I2C_DEV_SEPARATE_DFSRR) {
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x31, i2c->base + MPC_I2C_FDR);
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x10, i2c->base + MPC_I2C_DFSRR);
> - =A0 =A0 =A0 } else if (i2c->flags & FSL_I2C_DEV_CLOCK_5200)
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x3f, i2c->base + MPC_I2C_FDR);
> - =A0 =A0 =A0 else
> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writel(0x1031, i2c->base + MPC_I2C_FDR);
> +static void mpc_i2c_setclock_52xx(struct device_node *node,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct =
mpc_i2c *i2c,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 clo=
ck, u32 prescaler)
> +{
> + =A0 =A0 =A0 int fdr =3D mpc52xx_i2c_get_fdr(node, clock, prescaler);
> +
> + =A0 =A0 =A0 if (fdr < 0)
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 fdr =3D 0x3f; /* backward compatibility */
> + =A0 =A0 =A0 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
> + =A0 =A0 =A0 dev_info(i2c->dev, "clock %d Hz (fdr=3D%d)\n", clock, fdr);
> +}
> +
> +static void mpc_i2c_setclock_8xxx(struct device_node *node,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct =
mpc_i2c *i2c,
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 clo=
ck, u32 prescaler)
> +{
> + =A0 =A0 =A0 int fdr =3D fsl_i2c_get_fdr(node, clock, prescaler);
> +
> + =A0 =A0 =A0 if (fdr < 0)
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 fdr =3D 0x1031; /* backward compatibility *=
/
> + =A0 =A0 =A0 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
> + =A0 =A0 =A0 writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR);
> + =A0 =A0 =A0 dev_info(i2c->dev, "clock %d Hz (dfsrr=3D%d fdr=3D%d)\n",
> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0clock, fdr >> 8, fdr & 0xff);
> =A0}
Very neat and tidy indeed. I like this.
> Index: linux-2.6/arch/powerpc/sysdev/fsl_soc.c
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
> --- linux-2.6.orig/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 =A0 =A02009-03-3=
1 21:27:52.000000000 +0200
> +++ linux-2.6/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 2009-04-01 12:09:18.7=
96719327 +0200
> @@ -39,7 +39,7 @@
> =A0#include <sysdev/fsl_soc.h>
> =A0#include <mm/mmu_decl.h>
> =A0#include <asm/cpm2.h>
> -
> +#define DEBUG
^^^^^^^^^^^^^^^^^^^^^^^ oops?
g.
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: [PATCH v2] powerpc: i2c-mpc: make I2C bus speed configurable
From: Grant Likely @ 2009-04-01 13:47 UTC (permalink / raw)
To: Wolfgang Grandegger
Cc: linuxppc-dev, devicetree-discuss, linux-i2c, Ben Dooks
In-Reply-To: <fa686aa40904010644t1c111c05ka7349869eb155429@mail.gmail.com>
On Wed, Apr 1, 2009 at 7:44 AM, Grant Likely <grant.likely@secretlab.ca> wr=
ote:
> On Wed, Apr 1, 2009 at 7:13 AM, Wolfgang Grandegger <wg@grandegger.com> w=
rote:
>> This patch makes the I2C bus speed configurable by using the I2C node
>> property "clock-frequency". If the property is not defined, the old
>> fixed clock settings will be used for backward compatibility.
>
> I mostly like this patch. =A0However, as I mentioned in my other reply,
> I'm going to NAK it because the divisor tables are not common code and
> do not belong in common code files.
>
> Other than that, I like this version of the patch and I think it is
> almost finished. =A0More comments below.
Oh, and you should look in MAINTAINERS and cc this patch to Ben Dooks
and the linux-i2c@vger.kernel.org mailing list.
g.
>
>> -static void mpc_i2c_setclock(struct mpc_i2c *i2c)
>> -{
>> - =A0 =A0 =A0 /* Set clock and filters */
>> - =A0 =A0 =A0 if (i2c->flags & FSL_I2C_DEV_SEPARATE_DFSRR) {
>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x31, i2c->base + MPC_I2C_FDR);
>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x10, i2c->base + MPC_I2C_DFSRR);
>> - =A0 =A0 =A0 } else if (i2c->flags & FSL_I2C_DEV_CLOCK_5200)
>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writeb(0x3f, i2c->base + MPC_I2C_FDR);
>> - =A0 =A0 =A0 else
>> - =A0 =A0 =A0 =A0 =A0 =A0 =A0 writel(0x1031, i2c->base + MPC_I2C_FDR);
>> +static void mpc_i2c_setclock_52xx(struct device_node *node,
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct=
mpc_i2c *i2c,
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 cl=
ock, u32 prescaler)
>> +{
>> + =A0 =A0 =A0 int fdr =3D mpc52xx_i2c_get_fdr(node, clock, prescaler);
>> +
>> + =A0 =A0 =A0 if (fdr < 0)
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 fdr =3D 0x3f; /* backward compatibility */
>> + =A0 =A0 =A0 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
>> + =A0 =A0 =A0 dev_info(i2c->dev, "clock %d Hz (fdr=3D%d)\n", clock, fdr)=
;
>> +}
>> +
>> +static void mpc_i2c_setclock_8xxx(struct device_node *node,
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 struct=
mpc_i2c *i2c,
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 u32 cl=
ock, u32 prescaler)
>> +{
>> + =A0 =A0 =A0 int fdr =3D fsl_i2c_get_fdr(node, clock, prescaler);
>> +
>> + =A0 =A0 =A0 if (fdr < 0)
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 fdr =3D 0x1031; /* backward compatibility =
*/
>> + =A0 =A0 =A0 writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
>> + =A0 =A0 =A0 writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR);
>> + =A0 =A0 =A0 dev_info(i2c->dev, "clock %d Hz (dfsrr=3D%d fdr=3D%d)\n",
>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0clock, fdr >> 8, fdr & 0xff);
>> =A0}
>
> Very neat and tidy indeed. =A0I like this.
>
>> Index: linux-2.6/arch/powerpc/sysdev/fsl_soc.c
>> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
>> --- linux-2.6.orig/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 =A0 =A02009-03-=
31 21:27:52.000000000 +0200
>> +++ linux-2.6/arch/powerpc/sysdev/fsl_soc.c =A0 =A0 2009-04-01 12:09:18.=
796719327 +0200
>> @@ -39,7 +39,7 @@
>> =A0#include <sysdev/fsl_soc.h>
>> =A0#include <mm/mmu_decl.h>
>> =A0#include <asm/cpm2.h>
>> -
>> +#define DEBUG
> =A0^^^^^^^^^^^^^^^^^^^^^^^ =A0oops?
>
> g.
>
> --
> Grant Likely, B.Sc., P.Eng.
> Secret Lab Technologies Ltd.
>
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: 8641D with linux 2.6.29 did'n show second cpu
From: Kumar Gala @ 2009-04-01 13:48 UTC (permalink / raw)
To: Eduard Fuchs; +Cc: linuxppc-dev list, u-boot-dev U-Boot-UBOOTDEV
In-Reply-To: <200904011536.39689.edfuchs@uni-kassel.de>
On Apr 1, 2009, at 8:36 AM, Eduard Fuchs wrote:
> Hi,
>
> Am Mittwoch 01 April 2009 06:10:36 schrieb Kumar Gala:
>> On Mar 31, 2009, at 10:06 AM, Eduard Fuchs wrote:
>>> Hi,
>>>
>>> Am Dienstag 31 M=E4rz 2009 15:20:21 schrieb Kumar Gala:
>>>> On Mar 31, 2009, at 5:15 AM, Eduard Fuchs wrote:
>>>>> Hi,
>>>>>
>>>>> I'm testing the evaluation board from freescale (MPC8641DHPCN) =20
>>>>> with
>>>>> the latest
>>>>> linux kernel (2.6.29) and the second core seems disabled. =20
>>>>> CONFIG_SPM
>>>>> is
>>>>> enabled but the /proc/cpuinfo shows only one cpu. With original
>>>>> 2.6.27 kernel
>>>>> both cpu cores appears in /proc/cpuinfo.
>>>>>
>>>>> Has anyone an idea how can i enable the second core?
>>>>
>>>> Are you using u-boot? I can't remember if you need a newer u-=20
>>>> boot to
>>>> deal with changes in how we bring up the second core.
>>>
>>> Yes. My u-boot version is 2009.03. Are there some additional config
>>> keys for
>>> SMP support in u-boot?
>>
>> It appears we introduced a bug in v2009.03 of u-boot.
>
> I never thought that the problem could be in u-boot. I tested the =20
> board with
> u-boot v2009.01 and it works well.
the u-boot bug is that we are over-writting the page of code we need =20
to bring up the second core. Thus when the kernel releases the 2nd =20
core it goes off in the weeds.
I've sent some patches to the u-boot list that should fix the problem =20=
by making sure that u-boot avoids using the page of memory we need for =20=
the 2nd core.
- k=
^ permalink raw reply
* Re: powerpc/85xx: Add support for the "socrates" board (MPC8544)
From: Grant Likely @ 2009-04-01 13:49 UTC (permalink / raw)
To: Kumar Gala; +Cc: Scott Wood, linuxppc-dev
In-Reply-To: <D7365D0C-57B0-479C-9335-265620B8E5AE@kernel.crashing.org>
On Wed, Apr 1, 2009 at 7:27 AM, Kumar Gala <galak@kernel.crashing.org> wrot=
e:
>
> On Apr 1, 2009, at 8:10 AM, Wolfgang Grandegger wrote:
>
>> Grant Likely wrote:
>>>
>>> On Wed, Apr 1, 2009 at 1:36 AM, Wolfgang Grandegger <wg@grandegger.com>
>>> wrote:
>>>>
>>>> Anton Vorontsov wrote:
>>>>>
>>>>> On Tue, Mar 31, 2009 at 09:05:28AM -0600, Grant Likely wrote:
>>>>> [...]
>>>>>>>>>>>
>>>>>>>>>>> + =A0 =A0 =A0 soc8544@e0000000 {
>>>>>>>>>>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 #address-cells =3D <1>;
>>>>>>>>>>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 #size-cells =3D <1>;
>>>>>>>>>>> + =A0 =A0 =A0 =A0 =A0 =A0 =A0 device_type =3D "soc";
>>>>>>>>>>
>>>>>>>>>> Drop device_type here too.
>>>>>>>>>
>>>>>>>>> Grrr, I just realized that removing the devices type "soc" has
>>>>>>>>> broken
>>>>>>>>> fsl_get_sys_freq(). See:
>>>>>>>>>
>>>>>>>>> http://lxr.linux.no/linux+v2.6.29/arch/powerpc/sysdev/fsl_soc.c#L=
80
>>>>>>>>>
>>>>>>>>> We need a quick fix and we could take the occasion to establish a
>>>>>>>>> common
>>>>>>>>> function for the MPC52xx as well, but it's not obvious to me how =
to
>>>>>>>>> find
>>>>>>>>> the SOC node without the device type property.
>>>>>>>>
>>>>>>>> SoC node should have a compatible property, just like everything
>>>>>>>> else.
>>>>>>>>
>>>>>>>> compatible =3D "fsl,mpc8544-immr"; =A0(immr =3D=3D Internally Memo=
ry Mapped
>>>>>>>> Registers)
>>>>>>>>
>>>>>>>> Many other boards already do this.
>>>>>>>
>>>>>>> Yes, it does, but searching for the SOC node is not straight-forwar=
d
>>>>>>> because there is no common compatibility string but many CPU-specif=
ic
>>>>>>> compatibility strings, e.g. "fsl,mpc8560-immr", etc. Have I missed
>>>>>>> something?
>>>>>>
>>>>>> Choose a new value ("fsl,mpc-immr" perhaps?), document exactly what =
it
>>>>>> means, and add add it to the end of the compatible list.
>>>>>
>>>>> As Scott Wood once pointed out, IMMR does not exists for MPC85xx
>>>>> parts. There it's called CCSR.
>>>>>
>>>>> See this thread:
>>>>>
>>>>> http://www.mail-archive.com/linuxppc-dev@ozlabs.org/msg12665.html
>>>>>
>>>>> I still think that
>>>>> "fsl,mpc83NN-immr", "fsl,soc", "simple-bus" for 83xx
>>>>> and
>>>>> "fsl,mpc85NN-ccsr", "fsl,soc", "simple-bus" for 85xx
>>>>>
>>>>> would be OK, at least to start with. We can always deprecate "fsl,soc=
"
>>>>> compatible in favour of something more elegant, but "fsl,soc" should =
be
>>>>> just fine to replace device_type =3D "soc".
>>>>>
>>>>> Also, there is another good thing about "fsl,soc" -- U-Boot already
>>>>> finds it for 83xx CPUs. ;-)
>>>>
>>>> Ugh! I just realize the full impact of removing device type "soc". It
>>>> will break compatibility with U-Boot for many boards. Is it worth it?
>>>
>>> Yes, I know this. =A0I'm not asking you to fix all the other boards, bu=
t
>>> make sure that it is not required for the new board.
>>
>> Hm, I'm confused, if we want to fix this issue we need first to
>>
>> - fix all functions in fsl_soc.c searching for the compatible string
>> =A0"fsl,soc" instead of the device type "soc" (or both for backward
>> =A0compatibility).
>>
>> - fix U-Boot to find the SOC node by looking for "fsl,soc" to insert the
>> =A0proper bus-frequency, at least.
>>
>> That affects *all* boards using CONFIG_FSL_SOC and requires an
>> up-to-date version of U-Boot for new kernels :-(. If that is fixed, I
>> can remove the "device_type =3D "soc";" from socrates.dts (and may more)=
,
>> but not right now. Or have I missed something?
>
> I presume the intent is not to break old u-boots w/new kernels, but to ma=
ke
> it so new .dts don't require device_type =3D soc in them if using new ker=
nels.
Exactly.
g.
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable
From: Wolfgang Grandegger @ 2009-04-01 13:55 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <49D36F1F.2050107@grandegger.com>
Wolfgang Grandegger wrote:
> Grant Likely wrote:
>> On Wed, Apr 1, 2009 at 1:51 AM, Wolfgang Grandegger <wg@grandegger.com> wrote:
>>> Grant Likely wrote:
>>>> The table definition is more verbose this way, but I think it results
>>>> in more understandable and easier to extend code. It also adds lets
>>>> the compiler do more type checking for you.
>>> OK but I don't like the callback function to do the settings. We need
>>> backward compatibility with old DTS files including the ugly "dfsrr"
>>> property, right? Then it seems consequent to continue using i2c->flags
>>> for that purpose and not to introduce another method. If we don't need
>>> backward compatibility, we could drop the flags completely and just use
>>> callback functions.
>> I don't understand why you don't like it. It's an elegant solution
>> and it simplifies the code somewhat. After grabbing the callback
>> pointer the compatibility code can simply override it. But I won't
>> belabor the point or oppose the patch if you stick with the flags
>> pointer.
>
> I changed my mind ;-). Have a look to PATCH v2 I sent out a few minutes ago.
>
>>>>> --- linux-2.6.orig/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03-31 13:25:08.000000000 +0200
>>>>> +++ linux-2.6/arch/powerpc/platforms/52xx/mpc52xx_common.c 2009-03-31 13:28:54.309718526 +0200
>>>>> +int fsl_i2c_get_fdr(struct device_node *node, u32 i2c_clock, u32 i2c_flags)
>>>>> +{
>>>>> [...]
>>>>> +}
>>>>> +EXPORT_SYMBOL(fsl_i2c_get_fdr);
>>>> does not work on a multiplatform kernel. Both 8xxx and 52xx support
>>>> can be selected at the same time.
>>> OK, then we need different functions including stubs.
>> I've been thinking about this more. These tables are only ever going
>> to be used by the i2c_mpc driver and so really they are a part of the
>> i2c_mpc driver itself. Putting them into common code doesn't make any
>> sense because it is not common code. I will not merge a patch that
>> puts them into mpc5200 common code.
>
> It's not common code, I agree. How about putting it into mpc52xx_i2c.c
> and use:
>
> $ cat Makefile
> obj-$(CONFIG_I2C_MPC) += mpc52xx_i2c.o
That not a good idea either. I just checked the I2C interface of the
MPC512x and it can use the same table then the MPC5200B.
Wolfgang.
^ permalink raw reply
* Re: [PATCH 5/8] powerpc: i2c-mpc: make I2C bus speed configurable
From: Grant Likely @ 2009-04-01 13:55 UTC (permalink / raw)
To: Wolfgang Grandegger
Cc: linuxppc-dev, devicetree-discuss, linux-i2c, Ben Dooks
In-Reply-To: <49D36F1F.2050107@grandegger.com>
On Wed, Apr 1, 2009 at 7:41 AM, Wolfgang Grandegger <wg@grandegger.com> wro=
te:
> Grant Likely wrote:
>> On Wed, Apr 1, 2009 at 1:51 AM, Wolfgang Grandegger <wg@grandegger.com> =
wrote:
>>> Grant Likely wrote:
>>>> The table definition is more verbose this way, but I think it results
>>>> in more understandable and easier to extend code. =A0It also adds lets
>>>> the compiler do more type checking for you.
>>> OK but I don't like the callback function to do the settings. We need
>>> backward compatibility with old DTS files including the ugly "dfsrr"
>>> property, right? Then it seems consequent to continue using i2c->flags
>>> for that purpose and not to introduce another method. If we don't need
>>> backward compatibility, we could drop the flags completely and just use
>>> callback functions.
>>
>> I don't understand why you don't like it. =A0It's an elegant solution
>> and it simplifies the code somewhat. =A0After grabbing the callback
>> pointer the compatibility code can simply override it. =A0But I won't
>> belabor the point or oppose the patch if you stick with the flags
>> pointer.
>
> I changed my mind ;-). Have a look to PATCH v2 I sent out a few minutes a=
go.
I saw and I like. :-)
>> I've been thinking about this more. =A0These tables are only ever going
>> to be used by the i2c_mpc driver and so really they are a part of the
>> i2c_mpc driver itself. =A0Putting them into common code doesn't make any
>> sense because it is not common code. =A0I will not merge a patch that
>> puts them into mpc5200 common code.
>
> It's not common code, I agree. How about putting it into mpc52xx_i2c.c
> and use:
>
> =A0$ cat Makefile
> =A0obj-$(CONFIG_I2C_MPC) +=3D mpc52xx_i2c.o
>
> Or it could be moved back to the i2c_mpc driver and we add stubs for the
> functions to get the bus frequency, or use #ifdef's.
I'm happy with either as long as it lives in the same directory as the
i2c_mpc driver, and as long as the i2c maintainers are okay with it.
Oh, and if you use a separate file it should be statically linked into
the i2c_mpc module using the i2c_mpc-$(CONFIG_WHATEVER) trick. No
EXPORT_SYMBOLS should be needed.
g.
--=20
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
^ permalink raw reply
* Re: Problem with module_init?
From: Sean MacLennan @ 2009-04-01 14:52 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
In-Reply-To: <20090401112756.GA14171@yoda.jdub.homelinux.org>
On Wed, 1 Apr 2009 07:27:56 -0400
Josh Boyer <jwboyer@linux.vnet.ibm.com> wrote:
> I'm assuming this is the result of a git-bisect run?
Correct.
> Can I also assume you were loading the module on your Warp board?
Correct again.
Cheers,
Sean
^ permalink raw reply
* Re: issue at the beginning of kernel booting
From: Sauce.Cheng @ 2009-04-01 15:00 UTC (permalink / raw)
To: linuxppc-dev
In-Reply-To: <20090327161522.GA7809@ld0162-tx32.am.freescale.net>
thanks Scott!
> That is very old code; you're more likely to get help when running
> something up-to-date.
i have a latest u-boot-2009.03 updated instead of mine, and kernel version
is instead of 2.6.24.5
> This alternative was listed as text/plain.   is not plaintext.
> Please fix your mailer (and better yet, don't send HTML at all).
yeah, it is my fault. i am a newer of mail lists , i will be careful next
time.
> I doubt that it is actually halting here; more likely, you're just
> hitting a spot in the boot sequence where it's not safe to access your
> LEDs or other I/O, because you have the MMU off and the cache enabled.
> You'll typically be much better off leaving the very early code alone
> (it's almost never the culprit), except to ensure that you have a BAT
> mapping (cache-inhibited and guarded) for the I/O you want to use for
> debugging. Then, only touch that I/O device *after* the MMU is on and
> your mapping is in place.
according to your point, i have moved the codes used for debuging to the
place where after mmu being on, then there is nothing happened. it indicated
that proforming had halt before this.
i dont think there may be likely had some wrong in kernel source. but
actually it halt there in early code.
first i guess the reason that before i boot kernel without fdt. it still
halt after wiht fdt.
now i show my early code with debug code, please check it what fault is more
likely.
early code
/* initialize LEDs, used by Port B */
lis r8, (0x000000FF)@h
ori r8, r8, (0x000000FF)@l
lis r9, (M8247_IOP_PDIRB(0xF0000000))@h //define 0x10D20 as
M8247_IOP_PDIRB(Port B dir)
lis r9, r9, (M8247_IOP_PDIRB(0xF0000000))@l //define 0x10D30 as
M8247_IOP_PDATB(Port B dat)
stw r8, 0(r9)
/* turn D1 , successful */
lis r8, (0xFFFFFFFE)@h
ori r8, r8, (0xFFFFFFFE)@l
lis r9, (M8247_IOP_PDATB(0xF0000000))@h
lis r9, r9, (M8247_IOP_PDATB(0xF0000000))@l
stw r8, 0(r9)
bl early_init
/* here : mmu off: */
addi r4, r3, __after_mmu_off - _start
mfmsr r3
andi. r0,r3,MSR_DR|MSR_IR /* MMU enabled? */
beqlr
andc r3,r3,r0
mtspr SPRN_SRR0,r4
mtspr SPRN_SRR1,r3
sync
RFI
__after_mmu_off:
/* here : clear_bats: */
li r10,0
mfspr r9,SPRN_PVR
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
cmpwi r9, 1
beq 1f // my core is 603e, so both DBATx and IBATx should be initialized.
mtspr SPRN_DBAT0U,r10
.
.
.
mtspr SPRN_DBAT3L,r10
1:
mtspr SPRN_IBAT0U,r10
.
.
.
mtspr SPRN_IBAT3L,r10
BEGIN_FTR_SECTION // CPU_FTR_HAS_HIGH_BATS is default feature for G2_LE
core
mtspr SPRN_DBAT4U,r10
.
.
.
mtspr SPRN_IBAT7L,r10
END_FTR_SECTION_IFSET(CPU_FTR_HAS_HIGH_BATS)
blr
/* here: flush_tlbs: */
lis r10, 0x40
1: addic. r10, r10, -0x1000
tlbie r10
blt 1b
sync
blr
/* here : initial_bats: */
lis r11,KERNELBASE@h
mfspr r9,SPRN_PVR
rlwinm r9,r9,16,16,31 /* r9 = 1 for 601, 4 for 604 */
cmpwi 0,r9,1
bne 4f
4: tophys(r8,r11)
ori r8,r8,2 /* R/W access */
ori r11,r11,BL_16M<<2|0x2 /* set up BAT registers for 604 */
mtspr SPRN_DBAT0L,r8 /* N.B. 6xx (not 601) have valid */
mtspr SPRN_DBAT0U,r11 /* bit in upper BAT register */
mtspr SPRN_IBAT0L,r8
mtspr SPRN_IBAT0U,r11
isync
blr
bl reloc_offset
li r24,0 /* cpu# */
bl call_setup_cpu /* Call setup_cpu for this CPU */
here jump to call_setup_cpu, actually invoked setup_common_caches.
setup_common_caches:
/* turn D1 and D2 , successful */
lis r15, (0xFFFFFFFC)@h
ori r15, r15, (0xFFFFFFFC)@l
lis r16, (M8247_IOP_PDATB(0xF0000000))@h
lis r16, r16, (M8247_IOP_PDATB(0xF0000000))@l
stw r15, 0(r16)
mfspr r11,SPRN_HID0
andi. r0,r11,HID0_DCE
ori r11,r11,HID0_ICE|HID0_DCE
ori r8,r11,HID0_ICFI
bne 1f /* don't invalidate the D-cache */
ori r8,r8,HID0_DCI /* unless it wasn't enabled */
1: sync
mtspr SPRN_HID0,r8 /* enable and invalidate caches */
/* turn D1,D2 and D3 , fault */
lis r15, (0xFFFFFFF8)@h
ori r15, r15, (0xFFFFFFF8)@l
lis r16, (M8247_IOP_PDATB(0xF0000000))@h
lis r16, r16, (M8247_IOP_PDATB(0xF0000000))@l
stw r15, 0(r16)
sync
mtspr SPRN_HID0,r11 /* enable caches */
sync
isync
blr
here, if i removed the HID0_DCE, will be normal. in this situation , at
turn_on_mmu:, after enter start_here, will halt there.
Sauce
--
View this message in context: http://www.nabble.com/issue-at-the-beginning-of-kernel-booting-tp22741532p22828498.html
Sent from the linuxppc-dev mailing list archive at Nabble.com.
^ permalink raw reply
* Re: [PATCH v2] powerpc: i2c-mpc: make I2C bus speed configurable
From: Wolfgang Grandegger @ 2009-04-01 15:51 UTC (permalink / raw)
To: Grant Likely; +Cc: linuxppc-dev, devicetree-discuss, linux-i2c, Ben Dooks
In-Reply-To: <fa686aa40904010647o57b59845p54a9c1e1535e4453@mail.gmail.com>
Grant Likely wrote:
> On Wed, Apr 1, 2009 at 7:44 AM, Grant Likely <grant.likely@secretlab.ca> wrote:
>> On Wed, Apr 1, 2009 at 7:13 AM, Wolfgang Grandegger <wg@grandegger.com> wrote:
>>> This patch makes the I2C bus speed configurable by using the I2C node
>>> property "clock-frequency". If the property is not defined, the old
>>> fixed clock settings will be used for backward compatibility.
>> I mostly like this patch. However, as I mentioned in my other reply,
>> I'm going to NAK it because the divisor tables are not common code and
>> do not belong in common code files.
>>
>> Other than that, I like this version of the patch and I think it is
>> almost finished. More comments below.
Looks good now, indeed.
> Oh, and you should look in MAINTAINERS and cc this patch to Ben Dooks
> and the linux-i2c@vger.kernel.org mailing list.
Right, and I need to separate I2C and PowerPC related patches. And it
will require another round but some acked-by lines will help.
>>> -static void mpc_i2c_setclock(struct mpc_i2c *i2c)
>>> -{
>>> - /* Set clock and filters */
>>> - if (i2c->flags & FSL_I2C_DEV_SEPARATE_DFSRR) {
>>> - writeb(0x31, i2c->base + MPC_I2C_FDR);
>>> - writeb(0x10, i2c->base + MPC_I2C_DFSRR);
>>> - } else if (i2c->flags & FSL_I2C_DEV_CLOCK_5200)
>>> - writeb(0x3f, i2c->base + MPC_I2C_FDR);
>>> - else
>>> - writel(0x1031, i2c->base + MPC_I2C_FDR);
>>> +static void mpc_i2c_setclock_52xx(struct device_node *node,
>>> + struct mpc_i2c *i2c,
>>> + u32 clock, u32 prescaler)
>>> +{
>>> + int fdr = mpc52xx_i2c_get_fdr(node, clock, prescaler);
>>> +
>>> + if (fdr < 0)
>>> + fdr = 0x3f; /* backward compatibility */
>>> + writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
>>> + dev_info(i2c->dev, "clock %d Hz (fdr=%d)\n", clock, fdr);
>>> +}
>>> +
>>> +static void mpc_i2c_setclock_8xxx(struct device_node *node,
>>> + struct mpc_i2c *i2c,
>>> + u32 clock, u32 prescaler)
>>> +{
>>> + int fdr = fsl_i2c_get_fdr(node, clock, prescaler);
>>> +
>>> + if (fdr < 0)
>>> + fdr = 0x1031; /* backward compatibility */
>>> + writeb(fdr & 0xff, i2c->base + MPC_I2C_FDR);
>>> + writeb((fdr >> 8) & 0xff, i2c->base + MPC_I2C_DFSRR);
>>> + dev_info(i2c->dev, "clock %d Hz (dfsrr=%d fdr=%d)\n",
>>> + clock, fdr >> 8, fdr & 0xff);
>>> }
>> Very neat and tidy indeed. I like this.
Yep.
>>> Index: linux-2.6/arch/powerpc/sysdev/fsl_soc.c
>>> ===================================================================
>>> --- linux-2.6.orig/arch/powerpc/sysdev/fsl_soc.c 2009-03-31 21:27:52.000000000 +0200
>>> +++ linux-2.6/arch/powerpc/sysdev/fsl_soc.c 2009-04-01 12:09:18.796719327 +0200
>>> @@ -39,7 +39,7 @@
>>> #include <sysdev/fsl_soc.h>
>>> #include <mm/mmu_decl.h>
>>> #include <asm/cpm2.h>
>>> -
>>> +#define DEBUG
>> ^^^^^^^^^^^^^^^^^^^^^^^ oops?
Will fix.
Wolfgang.
^ permalink raw reply
* RE: /dev/random on PPC40EXr
From: Tirumala Reddy Marri @ 2009-04-01 17:05 UTC (permalink / raw)
To: Felix Radensky, linuxppc-dev
In-Reply-To: <22824979.post@talk.nabble.com>
There is PKA/TRNG driver for sure. Let me check if it was accepted in
opensource yet. Otherwise I will forward you the driver which may not be
there in opensource yet.
-----Original Message-----
From: linuxppc-dev-bounces+tmarri=3Damcc.com@ozlabs.org
[mailto:linuxppc-dev-bounces+tmarri=3Damcc.com@ozlabs.org] On Behalf Of
Felix Radensky
Sent: Wednesday, April 01, 2009 5:00 AM
To: linuxppc-dev@ozlabs.org
Subject: /dev/random on PPC40EXr
Hi,
On my custom board based on 405EXr /dev/random produces no output
at all, and /dev/urandom is not random enough for our purposes. Saving
entropy pool between reboots doesn't help much.
What can be done to increase the entropy of the system ?
I was thinking of adding IRQF_SAMPLE_RANDOM to network driver,
but since not too many drivers implement it, I don't know whether
it's a good idea or not.=20
Is there any work in progress to develop hw_random driver for 4xx
TRNG ?
Thanks a lot.
Felix.
--=20
View this message in context:
http://www.nabble.com/-dev-random-on-PPC40EXr-tp22824979p22824979.html
Sent from the linuxppc-dev mailing list archive at Nabble.com.
_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev
^ permalink raw reply
* USB drivers
From: Ron Madrid @ 2009-04-01 17:24 UTC (permalink / raw)
To: linuxppc-dev
I have a custom board based on the MPC8313ERDB and have communications
capabilities over Ethernet using internet sockets. Basically, just data
transfer from the host (my board) to a client (a PC). I want to be able to
perform similar transactions across USB.
I have done some cursory reading but am a little unclear on how I should
approach this. Am I going to have to write a host driver for my custom
board, and also write a gadget driver for any client machine? Also, since I
am desiring to do simple data transfers only, which drivers could I use as a
point of reference for my application?
Thanks in advance for any tips and suggestions.
Ron
^ permalink raw reply
* Re: /dev/random on PPC40EXr
From: Josh Boyer @ 2009-04-01 17:27 UTC (permalink / raw)
To: Tirumala Reddy Marri; +Cc: linuxppc-dev, Felix Radensky
In-Reply-To: <AC5E1C3367E37D44970B81A6ADD1DA2C071F4A5D@SDCEXCHANGE01.ad.amcc.com>
On Wed, Apr 01, 2009 at 10:05:00AM -0700, Tirumala Reddy Marri wrote:
>There is PKA/TRNG driver for sure. Let me check if it was accepted in
>opensource yet. Otherwise I will forward you the driver which may not be
>there in opensource yet.
You could just send it to the list instead. That way everyone would have it...
josh
^ permalink raw reply
* Support for kernels with large (10MB+) initramfs images
From: J.T. Conklin @ 2009-04-01 18:52 UTC (permalink / raw)
To: linuxppc-dev
I'm trying to embed the open source XORP routing stack in 85xx based
embedded system. XORP's original design didn't consider the
possibility of an embedded deployment, so just getting it all to fit
within the 32MB flash of our target has been a challenge all by
itself.
The BSP/SDK from the ODM that used a separate kernel and initrd, with
a 2MB region reserved for the kernel and a 16MB region reserved for
the initrd. However, I'm investigating whether it would be possible
to use a kernel with everything in a initramfs. This currently gives
us a 12MB image, and I'd be able to have two complete firmware images
on the system (the remaining space would be used for a small jffs2
filesystem and u-boot itself).
Unfortunately, I haven't been able to get this large kernel booting.
The first problem I ran into was that the zImage wrapper was linked
with a load address of 4MB, so the image couldn't be relocated without
overwriting itself. Changing zImage.lds.S to use a 32MB load address
fixed this problem.
I had hoped that that would be enough, but the kernel still does not
start. I have not yet attempted to trace kernel bring up (with a
BDI3000), so I'm not quite sure what's gone wrong.
I've done a bit of web browsing this morning, and saw some suggestions
to change u-boot's CFG_BOOTMAPSZ from 8<<20 to 16<<20; but that hasn't
helped either.
I'll continue to poke at this on my own, but I'd appreciate if anyone
can point me in the right direction.
Many thanks,
--jtc
^ permalink raw reply
* Re: MPC83xx console : no output after handover
From: Matthew L. Creech @ 2009-04-01 18:53 UTC (permalink / raw)
To: Gary Thomas; +Cc: linuxppc-dev
In-Reply-To: <5ee96a840903311522t10af5c64n53ab6f834ad475ff@mail.gmail.com>
It turned out that the normally-initialized 8250 driver was getting
stomped on by my device tree's serial driver (which is also an 8250) -
apparently CONFIG_SERIAL_8250[_CONSOLE] and CONFIG_SERIAL_OF_PLATFORM
don't play well together. Disabling the latter fixed my problem.
Thanks for the help, and sorry for the noise.
--
Matthew L. Creech
^ permalink raw reply
* Draft version of ML510 Linux patch (patch inlined)
From: Roderick Colenbrander @ 2009-04-01 19:16 UTC (permalink / raw)
To: linuxppc-dev
Hi,
As requested by Grant Likely here the same patch but now inlined.
Regards,
Roderick Colenbrander
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/boot/dts/virtex440-ml510.dts
ml510-dev/linux-2.6.29/arch/powerpc/boot/dts/virtex440-ml510.dts
--- linux-2.6.29/arch/powerpc/boot/dts/virtex440-ml510.dts 1970-01-01
01:00:00.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/boot/dts/virtex440-ml510.dts
2009-04-01 13:18:50.000000000 +0200
@@ -0,0 +1,452 @@
+/*
+ * Xilinx ML510 Reference Design support
+ * This DTS file was created for the ml510_bsb1_pcores_ppc440 reference
design.
+ * The reference design contains two bugs which prevent PCI from
working which
+ * should be fixed by the user:
+ * - the MPLB output of the soft-core should be connected to
plbv46_plb_1 which
+ * corresponds to SPLB0 of the ppc440 to allow the soft-core to
access system
+ * memory
+ * - C_IPIFBAR2PCIBAR_0 of the soft-core should be set to 0x80000000 in
order to
+ * reserve 0x80000000-0xffffffff (PCI) for memory mapped i/o and the
lower addresses
+ * can be used by PCI devices to access system memory (DMA).
+ *
+ * Copyright 2009, Roderick Colenbrander
+ */
+
+/dts-v1/;
+/ {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "xlnx,ml510-ref-design";
+ dcr-parent = <&ppc440_0>;
+ model = "testing";
+ DDR2_SDRAM_DIMM0: memory@0 {
+ device_type = "memory";
+ reg = < 0x0 0x20000000 >;
+ } ;
+ chosen {
+ bootargs = "console=ttyS0 root=/dev/xsa2 init=/etc/preinit";
+ linux,stdout-path = "/plb@0/serial@83e00000";
+ } ;
+ cpus {
+ #address-cells = <1>;
+ #cpus = <0x1>;
+ #size-cells = <0>;
+ ppc440_0: cpu@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ clock-frequency = <300000000>;
+ compatible = "PowerPC,440", "ibm,ppc440";
+ d-cache-line-size = <0x20>;
+ d-cache-size = <0x8000>;
+ dcr-access-method = "native";
+ dcr-controller ;
+ device_type = "cpu";
+ i-cache-line-size = <0x20>;
+ i-cache-size = <0x8000>;
+ model = "PowerPC,440";
+ reg = <0>;
+ timebase-frequency = <300000000>;
+ xlnx,apu-control = <0x2000>;
+ xlnx,apu-udi-0 = <0x0>;
+ xlnx,apu-udi-1 = <0x0>;
+ xlnx,apu-udi-10 = <0x0>;
+ xlnx,apu-udi-11 = <0x0>;
+ xlnx,apu-udi-12 = <0x0>;
+ xlnx,apu-udi-13 = <0x0>;
+ xlnx,apu-udi-14 = <0x0>;
+ xlnx,apu-udi-15 = <0x0>;
+ xlnx,apu-udi-2 = <0x0>;
+ xlnx,apu-udi-3 = <0x0>;
+ xlnx,apu-udi-4 = <0x0>;
+ xlnx,apu-udi-5 = <0x0>;
+ xlnx,apu-udi-6 = <0x0>;
+ xlnx,apu-udi-7 = <0x0>;
+ xlnx,apu-udi-8 = <0x0>;
+ xlnx,apu-udi-9 = <0x0>;
+ xlnx,dcr-autolock-enable = <0x1>;
+ xlnx,dcu-rd-ld-cache-plb-prio = <0x0>;
+ xlnx,dcu-rd-noncache-plb-prio = <0x0>;
+ xlnx,dcu-rd-touch-plb-prio = <0x0>;
+ xlnx,dcu-rd-urgent-plb-prio = <0x0>;
+ xlnx,dcu-wr-flush-plb-prio = <0x0>;
+ xlnx,dcu-wr-store-plb-prio = <0x0>;
+ xlnx,dcu-wr-urgent-plb-prio = <0x0>;
+ xlnx,dma0-control = <0x0>;
+ xlnx,dma0-plb-prio = <0x0>;
+ xlnx,dma0-rxchannelctrl = <0x1010000>;
+ xlnx,dma0-rxirqtimer = <0x3ff>;
+ xlnx,dma0-txchannelctrl = <0x1010000>;
+ xlnx,dma0-txirqtimer = <0x3ff>;
+ xlnx,dma1-control = <0x0>;
+ xlnx,dma1-plb-prio = <0x0>;
+ xlnx,dma1-rxchannelctrl = <0x1010000>;
+ xlnx,dma1-rxirqtimer = <0x3ff>;
+ xlnx,dma1-txchannelctrl = <0x1010000>;
+ xlnx,dma1-txirqtimer = <0x3ff>;
+ xlnx,dma2-control = <0x0>;
+ xlnx,dma2-plb-prio = <0x0>;
+ xlnx,dma2-rxchannelctrl = <0x1010000>;
+ xlnx,dma2-rxirqtimer = <0x3ff>;
+ xlnx,dma2-txchannelctrl = <0x1010000>;
+ xlnx,dma2-txirqtimer = <0x3ff>;
+ xlnx,dma3-control = <0x0>;
+ xlnx,dma3-plb-prio = <0x0>;
+ xlnx,dma3-rxchannelctrl = <0x1010000>;
+ xlnx,dma3-rxirqtimer = <0x3ff>;
+ xlnx,dma3-txchannelctrl = <0x1010000>;
+ xlnx,dma3-txirqtimer = <0x3ff>;
+ xlnx,endian-reset = <0x0>;
+ xlnx,generate-plb-timespecs = <0x1>;
+ xlnx,icu-rd-fetch-plb-prio = <0x0>;
+ xlnx,icu-rd-spec-plb-prio = <0x0>;
+ xlnx,icu-rd-touch-plb-prio = <0x0>;
+ xlnx,interconnect-imask = <0xffffffff>;
+ xlnx,mplb-allow-lock-xfer = <0x1>;
+ xlnx,mplb-arb-mode = <0x0>;
+ xlnx,mplb-awidth = <0x20>;
+ xlnx,mplb-counter = <0x500>;
+ xlnx,mplb-dwidth = <0x80>;
+ xlnx,mplb-max-burst = <0x8>;
+ xlnx,mplb-native-dwidth = <0x80>;
+ xlnx,mplb-p2p = <0x0>;
+ xlnx,mplb-prio-dcur = <0x2>;
+ xlnx,mplb-prio-dcuw = <0x3>;
+ xlnx,mplb-prio-icu = <0x4>;
+ xlnx,mplb-prio-splb0 = <0x1>;
+ xlnx,mplb-prio-splb1 = <0x0>;
+ xlnx,mplb-read-pipe-enable = <0x1>;
+ xlnx,mplb-sync-tattribute = <0x0>;
+ xlnx,mplb-wdog-enable = <0x1>;
+ xlnx,mplb-write-pipe-enable = <0x1>;
+ xlnx,mplb-write-post-enable = <0x1>;
+ xlnx,num-dma = <0x0>;
+ xlnx,pir = <0xf>;
+ xlnx,ppc440mc-addr-base = <0x0>;
+ xlnx,ppc440mc-addr-high = <0x1fffffff>;
+ xlnx,ppc440mc-arb-mode = <0x0>;
+ xlnx,ppc440mc-bank-conflict-mask = <0x1800000>;
+ xlnx,ppc440mc-control = <0xf810008f>;
+ xlnx,ppc440mc-max-burst = <0x8>;
+ xlnx,ppc440mc-prio-dcur = <0x2>;
+ xlnx,ppc440mc-prio-dcuw = <0x3>;
+ xlnx,ppc440mc-prio-icu = <0x4>;
+ xlnx,ppc440mc-prio-splb0 = <0x1>;
+ xlnx,ppc440mc-prio-splb1 = <0x0>;
+ xlnx,ppc440mc-row-conflict-mask = <0x7ffe00>;
+ xlnx,ppcdm-asyncmode = <0x0>;
+ xlnx,ppcds-asyncmode = <0x0>;
+ xlnx,user-reset = <0x0>;
+ } ;
+ } ;
+ plb_v46_0: plb@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "xlnx,plb-v46-1.03.a", "simple-bus";
+ ranges ;
+ FLASH: flash@fc000000 {
+ bank-width = <2>;
+ compatible = "xlnx,xps-mch-emc-2.00.a", "cfi-flash";
+ reg = < 0xfc000000 0x2000000 >;
+ xlnx,family = "virtex5";
+ xlnx,include-datawidth-matching-0 = <0x1>;
+ xlnx,include-datawidth-matching-1 = <0x0>;
+ xlnx,include-datawidth-matching-2 = <0x0>;
+ xlnx,include-datawidth-matching-3 = <0x0>;
+ xlnx,include-negedge-ioregs = <0x0>;
+ xlnx,include-plb-ipif = <0x1>;
+ xlnx,include-wrbuf = <0x1>;
+ xlnx,max-mem-width = <0x10>;
+ xlnx,mch-native-dwidth = <0x20>;
+ xlnx,mch-plb-clk-period-ps = <0x2710>;
+ xlnx,mch-splb-awidth = <0x20>;
+ xlnx,mch0-accessbuf-depth = <0x10>;
+ xlnx,mch0-protocol = <0x0>;
+ xlnx,mch0-rddatabuf-depth = <0x10>;
+ xlnx,mch1-accessbuf-depth = <0x10>;
+ xlnx,mch1-protocol = <0x0>;
+ xlnx,mch1-rddatabuf-depth = <0x10>;
+ xlnx,mch2-accessbuf-depth = <0x10>;
+ xlnx,mch2-protocol = <0x0>;
+ xlnx,mch2-rddatabuf-depth = <0x10>;
+ xlnx,mch3-accessbuf-depth = <0x10>;
+ xlnx,mch3-protocol = <0x0>;
+ xlnx,mch3-rddatabuf-depth = <0x10>;
+ xlnx,mem0-width = <0x10>;
+ xlnx,mem1-width = <0x20>;
+ xlnx,mem2-width = <0x20>;
+ xlnx,mem3-width = <0x20>;
+ xlnx,num-banks-mem = <0x1>;
+ xlnx,num-channels = <0x2>;
+ xlnx,priority-mode = <0x0>;
+ xlnx,synch-mem-0 = <0x0>;
+ xlnx,synch-mem-1 = <0x0>;
+ xlnx,synch-mem-2 = <0x0>;
+ xlnx,synch-mem-3 = <0x0>;
+ xlnx,synch-pipedelay-0 = <0x2>;
+ xlnx,synch-pipedelay-1 = <0x2>;
+ xlnx,synch-pipedelay-2 = <0x2>;
+ xlnx,synch-pipedelay-3 = <0x2>;
+ xlnx,tavdv-ps-mem-0 = <0x1adb0>;
+ xlnx,tavdv-ps-mem-1 = <0x3a98>;
+ xlnx,tavdv-ps-mem-2 = <0x3a98>;
+ xlnx,tavdv-ps-mem-3 = <0x3a98>;
+ xlnx,tcedv-ps-mem-0 = <0x1adb0>;
+ xlnx,tcedv-ps-mem-1 = <0x3a98>;
+ xlnx,tcedv-ps-mem-2 = <0x3a98>;
+ xlnx,tcedv-ps-mem-3 = <0x3a98>;
+ xlnx,thzce-ps-mem-0 = <0x88b8>;
+ xlnx,thzce-ps-mem-1 = <0x1b58>;
+ xlnx,thzce-ps-mem-2 = <0x1b58>;
+ xlnx,thzce-ps-mem-3 = <0x1b58>;
+ xlnx,thzoe-ps-mem-0 = <0x1b58>;
+ xlnx,thzoe-ps-mem-1 = <0x1b58>;
+ xlnx,thzoe-ps-mem-2 = <0x1b58>;
+ xlnx,thzoe-ps-mem-3 = <0x1b58>;
+ xlnx,tlzwe-ps-mem-0 = <0x88b8>;
+ xlnx,tlzwe-ps-mem-1 = <0x0>;
+ xlnx,tlzwe-ps-mem-2 = <0x0>;
+ xlnx,tlzwe-ps-mem-3 = <0x0>;
+ xlnx,twc-ps-mem-0 = <0x1adb0>;
+ xlnx,twc-ps-mem-1 = <0x3a98>;
+ xlnx,twc-ps-mem-2 = <0x3a98>;
+ xlnx,twc-ps-mem-3 = <0x3a98>;
+ xlnx,twp-ps-mem-0 = <0x11170>;
+ xlnx,twp-ps-mem-1 = <0x2ee0>;
+ xlnx,twp-ps-mem-2 = <0x2ee0>;
+ xlnx,twp-ps-mem-3 = <0x2ee0>;
+ xlnx,xcl0-linesize = <0x4>;
+ xlnx,xcl0-writexfer = <0x1>;
+ xlnx,xcl1-linesize = <0x4>;
+ xlnx,xcl1-writexfer = <0x1>;
+ xlnx,xcl2-linesize = <0x4>;
+ xlnx,xcl2-writexfer = <0x1>;
+ xlnx,xcl3-linesize = <0x4>;
+ xlnx,xcl3-writexfer = <0x1>;
+ } ;
+ Hard_Ethernet_MAC: xps-ll-temac@81c00000 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "xlnx,compound";
+ ethernet@81c00000 {
+ compatible = "xlnx,xps-ll-temac-1.01.b";
+ device_type = "network";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 8 2 >;
+ llink-connected = <&Hard_Ethernet_MAC_fifo>;
+ local-mac-address = [ 02 00 00 00 00 00 ];
+ reg = < 0x81c00000 0x40 >;
+ xlnx,bus2core-clk-ratio = <0x1>;
+ xlnx,phy-type = <0x3>;
+ xlnx,phyaddr = <0x1>;
+ xlnx,rxcsum = <0x0>;
+ xlnx,rxfifo = <0x8000>;
+ xlnx,temac-type = <0x0>;
+ xlnx,txcsum = <0x0>;
+ xlnx,txfifo = <0x8000>;
+ } ;
+ } ;
+ Hard_Ethernet_MAC_fifo: xps-ll-fifo@81a00000 {
+ compatible = "xlnx,xps-ll-fifo-1.01.a";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 6 2 >;
+ reg = < 0x81a00000 0x10000 >;
+ xlnx,family = "virtex5";
+ } ;
+ IIC_EEPROM: i2c@81600000 {
+ compatible = "xlnx,xps-iic-2.00.a";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 9 2 >;
+ reg = < 0x81600000 0x10000 >;
+ xlnx,clk-freq = <0x5f5e100>;
+ xlnx,family = "virtex5";
+ xlnx,gpo-width = <0x1>;
+ xlnx,iic-freq = <0x186a0>;
+ xlnx,scl-inertial-delay = <0x5>;
+ xlnx,sda-inertial-delay = <0x5>;
+ xlnx,ten-bit-adr = <0x0>;
+ } ;
+ LCD_OPTIONAL: gpio@81420000 {
+ compatible = "xlnx,xps-gpio-1.00.a";
+ reg = < 0x81420000 0x10000 >;
+ xlnx,all-inputs = <0x0>;
+ xlnx,all-inputs-2 = <0x0>;
+ xlnx,dout-default = <0x0>;
+ xlnx,dout-default-2 = <0x0>;
+ xlnx,family = "virtex5";
+ xlnx,gpio-width = <0xb>;
+ xlnx,interrupt-present = <0x0>;
+ xlnx,is-bidir = <0x1>;
+ xlnx,is-bidir-2 = <0x1>;
+ xlnx,is-dual = <0x0>;
+ xlnx,tri-default = <0xffffffff>;
+ xlnx,tri-default-2 = <0xffffffff>;
+ } ;
+ LEDs_4Bit: gpio@81400000 {
+ compatible = "xlnx,xps-gpio-1.00.a";
+ reg = < 0x81400000 0x10000 >;
+ xlnx,all-inputs = <0x0>;
+ xlnx,all-inputs-2 = <0x0>;
+ xlnx,dout-default = <0x0>;
+ xlnx,dout-default-2 = <0x0>;
+ xlnx,family = "virtex5";
+ xlnx,gpio-width = <0x4>;
+ xlnx,interrupt-present = <0x0>;
+ xlnx,is-bidir = <0x1>;
+ xlnx,is-bidir-2 = <0x1>;
+ xlnx,is-dual = <0x0>;
+ xlnx,tri-default = <0xffffffff>;
+ xlnx,tri-default-2 = <0xffffffff>;
+ } ;
+ RS232_Uart_1: serial@83e00000 {
+ clock-frequency = <100000000>;
+ compatible = "xlnx,xps-uart16550-2.00.b", "ns16550";
+ current-speed = <9600>;
+ device_type = "serial";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 11 2 >;
+ reg = < 0x83e00000 0x10000 >;
+ reg-offset = <0x1003>;
+ reg-shift = <2>;
+ xlnx,family = "virtex5";
+ xlnx,has-external-rclk = <0x0>;
+ xlnx,has-external-xin = <0x0>;
+ xlnx,is-a-16550 = <0x1>;
+ } ;
+ SPI_EEPROM: xps-spi@feff8000 {
+ compatible = "xlnx,xps-spi-2.00.b";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 10 2 >;
+ reg = < 0xfeff8000 0x80 >;
+ xlnx,family = "virtex5";
+ xlnx,fifo-exist = <0x1>;
+ xlnx,num-ss-bits = <0x1>;
+ xlnx,num-transfer-bits = <0x8>;
+ xlnx,sck-ratio = <0x80>;
+ } ;
+ SysACE_CompactFlash: sysace@83600000 {
+ compatible = "xlnx,xps-sysace-1.00.a";
+ interrupt-parent = <&xps_intc_0>;
+ interrupts = < 7 2 >;
+ reg = < 0x83600000 0x10000 >;
+ xlnx,family = "virtex5";
+ xlnx,mem-width = <0x10>;
+ } ;
+ dcr_v29_0: dcr@0 {
+ #address-cells = <1>;
+ #size-cells = <1>;
+ compatible = "xlnx,dcr-v29-1.00.a", "simple-bus";
+ ranges = < 0x0 0x44a00000 0x1000 >;
+ } ;
+ plbv46_dcr_bridge_0: plbv46-dcr-bridge@44a00000 {
+ compatible = "xlnx,plbv46-dcr-bridge-1.00.a";
+ dcr-access-method = "mmio";
+ dcr-controller ;
+ dcr-mmio-range = < 0x44a00000 0x1000 >;
+ dcr-mmio-stride = <4>;
+ reg = < 0x44a00000 0x1000 >;
+ xlnx,family = "virtex5";
+ } ;
+ plbv46_dvi_cntlr_0: plbv46-dvi-cntlr@c9800000 {
+ compatible = "xlnx,plbv46-dvi-cntlr-1.00.a";
+ dcr-parent = <&plbv46_dcr_bridge_0>;
+ dcr-reg = < 0x100 0x4 >;
+ reg = < 0xc9800000 0x10000 >;
+ xlnx,default-tft-base-addr = <0x0>;
+ xlnx,dps-init = <0x1>;
+ xlnx,family = "virtex5";
+ xlnx,mplb-awidth = <0x20>;
+ xlnx,mplb-clk-period-ps = <0x2710>;
+ xlnx,mplb-dwidth = <0x80>;
+ xlnx,mplb-native-dwidth = <0x40>;
+ xlnx,mplb-p2p = <0x1>;
+ xlnx,mplb-smallest-slave = <0x80>;
+ xlnx,on-init = <0x1>;
+ } ;
+ plbv46_pci_0: plbv46-pci@85e00000 {
+ #size-cells = <2>;
+ #address-cells = <3>;
+ compatible = "xlnx,plbv46-pci-1.03.a";
+ device_type = "pci";
+ reg = < 0x85e00000 0x10000 >; /* addr is at +0x10c, data at +0x110
*/
+
+ /* The PCI bus is implemented by a soft-core which is connected to
the PLB bus which is seen by the CPU at 0xa0000000.
+ * Both the PLB and PCI have their own address domain. The PCI
soft-core performs this translation. The Xilinx plbpci doc
+ * mentions 'the number of high-order bits substituted in the PLB
address presented to the bridge is given by the number
+ * of bits that are the SAME between C_IPIFBAR_N and
C_IPIF_HIGHADDR_N.'
+ *
+ * For the default ml510_bsb1_pcores_ppc440 reference design this
means:
+ * C_IPIFBAR_0 = 0xa0000000
+ * C_IPIF_HIGHADDR_0 = 0xbfffffff <- only the last 3 bits of
(0xa=1010b, 0xb=1011b) are similar
+ * C_IPIFBAR2PCIBAR_0 = 0x00000000
+ *
+ * C_IPIFBAR_1 = 0x94000000
+ * C_IPIF_HIGHADDR_1 = 0x97ffffff <- only the last 6 bits are
similar
+ * C_IPIFBAR2PCIBAR_1 = 0x00000000
+ *
+ * This means that a CPU write to 0xa0001234 translates to
0x00001234 on the PCI bus and that
+ * the pcibar_0 base and pcibar_1 base are zero. In order to prevent
collision between inbound
+ * and outbound memory reads/writes C_IPIFBAR2PCIBAR_0 needs to be
set to 0x80000000.
+ */
+ ranges = <0x02000000 0x00000000 0x80000000 0xa0000000 0x00000000
0x20000000
+ 0x01000000 0x00000000 0x00000000 0x94000000 0x00000000
0x00010000>;
+
+ #interrupt-cells = <1>;
+ interrupt-parent = <&xps_intc_0>;
+ interrupt-map-mask = <0xff00 0x0 0x0 0x7>;
+ interrupt-map = <
+ /* IDSEL 0x15 / dev=5, bus=0 / PCI slot 5 */
+ /* pci irq a is connected to xintc irq 5, b to 4, c to 3 and d to 2
*/
+ /* According to the datasheet + schematic ABCD [FPGA] of slot 5 is
mapped to DABC, testing showed that at least A maps to B */
+ 0x2800 0 0 1 &xps_intc_0 4 2
+// 0x2800 0 0 2 &xps_intc_0 5 2
+// 0x2800 0 0 3 &xps_intc_0 4 2
+// 0x2800 0 0 4 &xps_intc_0 3 2
+
+ /* IDSEL 0x16 / dev=6, bus=0 / PCI slot 3 */
+ 0x3000 0 0 1 &xps_intc_0 3 2
+ 0x3000 0 0 2 &xps_intc_0 2 2
+ 0x3000 0 0 3 &xps_intc_0 5 2
+ 0x3000 0 0 4 &xps_intc_0 4 2
+
+ /* IDSEL 0x11 / dev=1, bus=0 / AC97 audio */
+ 0x0800 0 0 1 &i8259 7 2
+
+ /* IDSEL 0x1b / dev=11, bus=0 / IDE */
+ 0x5800 0 0 1 &i8259 14 2
+
+ /* IDSEL 0x1f / dev 15, bus=0 / USB */
+ 0x7800 0 0 1 &i8259 7 2
+ >;
+ ali_m1533 {
+ #size-cells = <1>;
+ #address-cells = <2>;
+ i8259: interrupt-controller@20 {
+ reg = <1 0x20 2
+ 1 0xa0 2
+ 1 0x4d0 2>;
+ interrupt-controller;
+ device_type = "interrupt-controller";
+ #address-cells = <0>;
+ #interrupt-cells = <2>;
+ compatible = "chrp,iic";
+
+ interrupts = <1 2>;
+ interrupt-parent = <&xps_intc_0>;
+ };
+ };
+ } ;
+ xps_bram_if_cntlr_1: xps-bram-if-cntlr@ffff0000 {
+ compatible = "xlnx,xps-bram-if-cntlr-1.00.a";
+ reg = < 0xffff0000 0x10000 >;
+ xlnx,family = "virtex5";
+ } ;
+ xps_intc_0: interrupt-controller@81800000 {
+ #interrupt-cells = <0x2>;
+ compatible = "xlnx,xps-intc-1.00.a";
+ interrupt-controller ;
+ reg = < 0x81800000 0x10000 >;
+ xlnx,num-intr-inputs = <0xc>;
+ } ;
+ } ;
+} ;
Binary files linux-2.6.29/arch/powerpc/boot/simpleImage.virtex440-ml510
and ml510-dev/linux-2.6.29/arch/powerpc/boot/simpleImage.virtex440-ml510
differ
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/configs/44x/virtex5_defconfig
ml510-dev/linux-2.6.29/arch/powerpc/configs/44x/virtex5_defconfig
--- linux-2.6.29/arch/powerpc/configs/44x/virtex5_defconfig 2009-03-24
00:12:14.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/configs/44x/virtex5_defconfig
2009-04-01 13:20:29.000000000 +0200
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.29-rc2
-# Tue Jan 20 08:22:49 2009
+# Linux kernel version: 2.6.29
+# Wed Apr 1 13:20:29 2009
#
# CONFIG_PPC64 is not set
@@ -75,6 +75,15 @@
# CONFIG_BSD_PROCESS_ACCT is not set
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=14
@@ -88,10 +97,12 @@
# CONFIG_IPC_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
# CONFIG_EMBEDDED is not set
CONFIG_SYSCTL_SYSCALL=y
CONFIG_KALLSYMS=y
@@ -101,10 +112,8 @@
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
-CONFIG_COMPAT_BRK=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
@@ -113,6 +122,7 @@
CONFIG_AIO=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
+CONFIG_COMPAT_BRK=y
CONFIG_SLAB=y
# CONFIG_SLUB is not set
# CONFIG_SLOB is not set
@@ -152,13 +162,9 @@
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_CLASSIC_RCU=y
-# CONFIG_TREE_RCU is not set
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_FREEZER is not set
# CONFIG_PPC4xx_PCI_EXPRESS is not set
+CONFIG_XILINX_VIRTEX_PCI=y
#
# Platform support
@@ -179,6 +185,7 @@
# CONFIG_GLACIER is not set
# CONFIG_YOSEMITE is not set
CONFIG_XILINX_VIRTEX440_GENERIC_BOARD=y
+CONFIG_XILINX_ML510=y
# CONFIG_PPC44x_SIMPLE is not set
# CONFIG_PPC4xx_GPIO is not set
CONFIG_XILINX_VIRTEX=y
@@ -186,7 +193,7 @@
# CONFIG_IPIC is not set
# CONFIG_MPIC is not set
# CONFIG_MPIC_WEIRD is not set
-# CONFIG_PPC_I8259 is not set
+CONFIG_PPC_I8259=y
# CONFIG_PPC_RTAS is not set
# CONFIG_MMIO_NVRAM is not set
# CONFIG_PPC_MPC106 is not set
@@ -290,7 +297,6 @@
#
# Networking options
#
-# CONFIG_NET_NS is not set
CONFIG_COMPAT_NET_DEV_OPS=y
CONFIG_PACKET=y
# CONFIG_PACKET_MMAP is not set
@@ -499,12 +505,16 @@
# CONFIG_BLK_DEV_HD is not set
CONFIG_MISC_DEVICES=y
# CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_93CX6 is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -545,6 +555,7 @@
# CONFIG_SUNGEM is not set
# CONFIG_CASSINI is not set
# CONFIG_NET_VENDOR_3COM is not set
+# CONFIG_DNET is not set
# CONFIG_NET_TULIP is not set
# CONFIG_HP100 is not set
# CONFIG_IBM_NEW_EMAC is not set
@@ -578,6 +589,7 @@
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
# CONFIG_JME is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
@@ -637,7 +649,6 @@
CONFIG_MOUSE_PS2_ALPS=y
CONFIG_MOUSE_PS2_LOGIPS2PP=y
CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
CONFIG_MOUSE_PS2_TRACKPOINT=y
# CONFIG_MOUSE_PS2_ELANTECH is not set
# CONFIG_MOUSE_PS2_TOUCHKIT is not set
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/platforms/44x/Kconfig
ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/Kconfig
--- linux-2.6.29/arch/powerpc/platforms/44x/Kconfig 2009-03-24
00:12:14.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/Kconfig 2009-03-27
15:50:28.000000000 +0100
@@ -160,6 +160,16 @@
Most Virtex 5 designs should use this unless it needs to do some
special configuration at board probe time.
+config XILINX_ML510
+ bool "Xilinx ML510 Reference Design support"
+ depends on 44x
+ default n
+ select XILINX_VIRTEX_5_FXT
+ select PPC_PCI_CHOICE
+ select XILINX_VIRTEX_PCI if PCI
+ select PPC_INDIRECT_PCI if PCI
+ select PPC_I8259 if PCI
+
config PPC44x_SIMPLE
bool "Simple PowerPC 44x board support"
depends on 44x
@@ -232,4 +242,3 @@
config XILINX_VIRTEX_5_FXT
bool
select XILINX_VIRTEX
-
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/platforms/44x/Makefile
ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/Makefile
--- linux-2.6.29/arch/powerpc/platforms/44x/Makefile 2009-03-24
00:12:14.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/Makefile
2009-04-01 11:59:28.000000000 +0200
@@ -4,3 +4,4 @@
obj-$(CONFIG_SAM440EP) += sam440ep.o
obj-$(CONFIG_WARP) += warp.o
obj-$(CONFIG_XILINX_VIRTEX_5_FXT) += virtex.o
+obj-$(CONFIG_XILINX_ML510) += ml510.o
\ No newline at end of file
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/platforms/44x/ml510.c
ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/ml510.c
--- linux-2.6.29/arch/powerpc/platforms/44x/ml510.c 1970-01-01
01:00:00.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/platforms/44x/ml510.c 2009-04-01
12:42:28.000000000 +0200
@@ -0,0 +1,161 @@
+/*
+ * Xilinx ML510 Reference Design support, derived from
+ * the generic Xilinx Virtex 5 board support
+ *
+ * Copyright 2007 Secret Lab Technologies Ltd.
+ * Copyright 2008 Xilinx, Inc.
+ * Copyright 2009 Roderick Colenbrander
+ *
+ * The i8259 cascade code was derived from 86xx/pic.c which is
copyrighted by Freescale Semiconductor, Inc.
+ * Xilinx ML510 PCI initialization code, derived from the Xilinx
ML300/ML410 based board support.
+ *
+ * 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/init.h>
+#include <linux/of_platform.h>
+#include <asm/machdep.h>
+#include <asm/prom.h>
+#include <asm/time.h>
+#include <asm/xilinx_intc.h>
+#include <asm/reg.h>
+#include <asm/ppc4xx.h>
+#ifdef CONFIG_PPC_I8259
+#include <asm/i8259.h>
+#endif
+#ifdef CONFIG_PCI
+#include <linux/pci.h>
+#endif
+#include "44x.h"
+
+static struct of_device_id xilinx_of_bus_ids[] __initdata = {
+ { .compatible = "simple-bus", },
+ { .compatible = "xlnx,plb-v46-1.00.a", },
+ { .compatible = "xlnx,plb-v46-1.02.a", },
+ { .compatible = "xlnx,plb-v34-1.01.a", },
+ { .compatible = "xlnx,plb-v34-1.02.a", },
+ { .compatible = "xlnx,opb-v20-1.10.c", },
+ { .compatible = "xlnx,dcr-v29-1.00.a", },
+ { .compatible = "xlnx,compound", },
+ {}
+};
+
+#ifdef CONFIG_PPC_I8259
+static void ml510_8259_cascade(unsigned int irq, struct irq_desc *desc)
+{
+ unsigned int cascade_irq = i8259_irq();
+ if (cascade_irq != NO_IRQ)
+ generic_handle_irq(cascade_irq);
+
+ /* Let xilinx_intc end the interrupt */
+ desc->chip->ack(irq);
+ desc->chip->unmask(irq);
+}
+
+static void __init ml510_setup_i8259_cascade(void)
+{
+ struct device_node *np, *cascade_node = NULL;
+ int cascade_irq;
+
+ /* Initialize i8259 controller */
+ for_each_node_by_type(np, "interrupt-controller")
+ if (of_device_is_compatible(np, "chrp,iic")) {
+ cascade_node = np;
+ break;
+ }
+
+ if (cascade_node == NULL) {
+ printk(KERN_DEBUG "Could not find i8259 PIC\n");
+ return;
+ }
+
+ cascade_irq = irq_of_parse_and_map(cascade_node, 0);
+ if (cascade_irq == NO_IRQ) {
+ printk(KERN_ERR "Failed to map cascade interrupt\n");
+ return;
+ }
+
+ i8259_init(cascade_node, 0);
+
+ of_node_put(cascade_node);
+ set_irq_chained_handler(cascade_irq, ml510_8259_cascade);
+}
+#endif /* CONFIG_PPC_I8259 */
+
+#ifdef CONFIG_PCI
+static void __devinit ali_quirk(struct pci_dev *dev)
+{
+ /* Enable the IDE controller */
+ pci_write_config_byte(dev, 0x58, 0x4c);
+ /* Assign irq 14 to the primary ide channel */
+ pci_write_config_byte(dev, 0x44, 0x0d);
+ /* Assign irq 15 to the secondary ide channel */
+ pci_write_config_byte(dev, 0x75, 0x0f);
+ /* Set the ide controller in native mode */
+ pci_write_config_byte(dev, 0x09, 0xff);
+
+ pci_write_config_byte(dev, 0x48, 0x00); // INTB = disabled, INTA =
disabled
+ pci_write_config_byte(dev, 0x4a, 0x00); // INTD = disabled, INTC =
disabled
+ pci_write_config_byte(dev, 0x4b, 0x00); // Audio = INT7, Modem =
disabled.
+ pci_write_config_byte(dev, 0x74, 0x06); // USB = INT7
+}
+DECLARE_PCI_FIXUP_EARLY(0x10b9, 0x1533, ali_quirk);
+#endif /* CONFIG_PCI */
+
+static int __init ml510_device_probe(void)
+{
+ of_platform_bus_probe(NULL, xilinx_of_bus_ids, NULL);
+
+ return 0;
+}
+machine_device_initcall(ml510, ml510_device_probe);
+
+static int __init ml510_probe(void)
+{
+ unsigned long root = of_get_flat_dt_root();
+
+ if (!of_flat_dt_is_compatible(root, "xlnx,ml510-ref-design"))
+ return 0;
+
+ return 1;
+}
+
+void virtex_pci_init(void);
+static void __init ml510_setup_arch(void)
+{
+ struct device_node *pci_node = of_find_compatible_node(NULL, NULL,
"xlnx,plbv46-pci-1.03.a");
+
+#ifdef CONFIG_PCI
+ if(pci_node)
+ {
+//Is this the right way or should this be done using OF?
+ /* Register the host bridge */
+ virtex_pci_init();
+ }
+#endif /* CONFIG_PCI */
+}
+
+static void ml510_init_IRQ(void)
+{
+ xilinx_intc_init_tree();
+
+#ifdef CONFIG_PPC_I8259
+ /* The devices on the ALI M1553 south bridge are connected to an
internal i8259 */
+ ml510_setup_i8259_cascade();
+ /* Program irq 7 (usb/audio), 14/15 (ide) to level sensitive */
+ outb(0xc0, 0x4d0);
+ outb(0xc0, 0x4d1);
+#endif /* CONFIG_PPC_I8259 */
+}
+
+define_machine(ml510) {
+ .name = "Xilinx ML510 Reference Design support",
+ .probe = ml510_probe,
+ .setup_arch = ml510_setup_arch,
+ .init_IRQ = ml510_init_IRQ,
+ .get_irq = xilinx_intc_get_irq,
+ .calibrate_decr = generic_calibrate_decr,
+ .restart = ppc4xx_reset_system,
+};
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/sysdev/Kconfig
ml510-dev/linux-2.6.29/arch/powerpc/sysdev/Kconfig
--- linux-2.6.29/arch/powerpc/sysdev/Kconfig 2009-03-24
00:12:14.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/sysdev/Kconfig 2009-03-27
12:50:29.000000000 +0100
@@ -12,3 +12,7 @@
depends on PCI_MSI
default y if MPIC
default y if FSL_PCI
+
+config XILINX_VIRTEX_PCI
+ bool
+ depends on PCI
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/sysdev/Makefile
ml510-dev/linux-2.6.29/arch/powerpc/sysdev/Makefile
--- linux-2.6.29/arch/powerpc/sysdev/Makefile 2009-03-24
00:12:14.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/sysdev/Makefile 2009-03-27
11:57:45.000000000 +0100
@@ -34,6 +34,7 @@
obj-$(CONFIG_4xx) += uic.o
obj-$(CONFIG_4xx_SOC) += ppc4xx_soc.o
obj-$(CONFIG_XILINX_VIRTEX) += xilinx_intc.o
+obj-$(CONFIG_XILINX_VIRTEX_PCI) += virtex_pci.o
obj-$(CONFIG_OF_RTC) += of_rtc.o
ifeq ($(CONFIG_PCI),y)
obj-$(CONFIG_4xx) += ppc4xx_pci.o
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/arch/powerpc/sysdev/virtex_pci.c
ml510-dev/linux-2.6.29/arch/powerpc/sysdev/virtex_pci.c
--- linux-2.6.29/arch/powerpc/sysdev/virtex_pci.c 1970-01-01
01:00:00.000000000 +0100
+++ ml510-dev/linux-2.6.29/arch/powerpc/sysdev/virtex_pci.c 2009-04-01
12:54:42.000000000 +0200
@@ -0,0 +1,95 @@
+/*
+ * PCI support for Xilinx plbv46_pci soft-core which can be used on
Xilinx Virtex ML410 / ML510 boards.
+ *
+ * Copyright 2009 Roderick Colenbrander
+ *
+ * The pci bridge fixup code was copied from ppc4xx_pci.c and was
written by Benjamin Herrenschmidt.
+ * Copyright 2007 Ben. Herrenschmidt <benh@kernel.crashing.org>, IBM
Corp.
+ *
+ * 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/pci.h>
+#include <mm/mmu_decl.h>
+#include <asm/io.h>
+
+#define XPLB_PCI_ADDR 0x10c
+#define XPLB_PCI_DATA 0x110
+#define XPLB_PCI_BUS 0x114
+
+#define PCI_HOST_ENABLE_CMD PCI_COMMAND_SERR | PCI_COMMAND_PARITY |
PCI_COMMAND_MASTER | PCI_COMMAND_MEMORY
+
+static void fixup_virtex_pci_bridge(struct pci_dev *dev)
+{
+ struct pci_controller *hose;
+ int i;
+
+ if (dev->devfn != 0 || dev->bus->self != NULL)
+ return;
+
+ hose = pci_bus_to_host(dev->bus);
+ if (hose == NULL)
+ return;
+
+ if(!of_device_is_compatible(hose->dn, "xlnx,plbv46-pci-1.03.a"))
+ return;
+
+ /* Hide the PCI host BARs from the kernel as their content doesn't
+ * fit well in the resource management
+ */
+ for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
+ dev->resource[i].start = dev->resource[i].end = 0;
+ dev->resource[i].flags = 0;
+ }
+
+ printk(KERN_INFO "PCI: Hiding Xilinx plb-pci host bridge resources %s
\n",
+ pci_name(dev));
+}
+DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID,
fixup_virtex_pci_bridge);
+
+void virtex_pci_init(void)
+{
+ struct device_node *pci_node = of_find_compatible_node(NULL, NULL,
"xlnx,plbv46-pci-1.03.a");
+
+ if(pci_node)
+ {
+ struct pci_controller *hose;
+ struct resource r;
+ void __iomem *pci_reg;
+
+ printk("Found a Xilinx plb-pci host bridge\n");
+
+ if(of_address_to_resource(pci_node, 0, &r))
+ {
+ printk("No address for Xilinx plb-pci host bridge\n");
+ return;
+ }
+
+ hose = pcibios_alloc_controller(pci_node);
+ if (!hose)
+ return;
+
+ hose->first_busno = 0;
+ hose->last_busno = 1; /* there are two slots behind a TI2250
pci-to-pci bridge */
+
+ /* Setup config space */
+ setup_indirect_pci(hose, r.start + XPLB_PCI_ADDR, r.start +
XPLB_PCI_DATA, 0);
+
+ /* According to the xilinx plbv46_pci documentation the soft-core
starts a self-init when the bus master enable bit is set.
+ * Without this bit set the pci bus can't be scanned. */
+ early_write_config_word(hose, 0, 0, PCI_COMMAND,
PCI_HOST_ENABLE_CMD);
+
+ /* Set the max latency timer to 255 */
+ early_write_config_byte(hose, 0, 0, PCI_LATENCY_TIMER, 0xff);
+
+ /* Set the max bus number to 255 */
+ pci_reg = of_iomap(pci_node, 0);
+ out_8(pci_reg + XPLB_PCI_BUS, 0xff);
+ iounmap(pci_reg);
+
+ /* Register the host bridge with the linux kernel! */
+ pci_process_bridge_OF_ranges(hose, pci_node, 1 /* primary=yes */);
+ }
+}
diff -urN -X linux-2.6.29/Documentation/dontdiff
linux-2.6.29/drivers/ide/alim15x3.c
ml510-dev/linux-2.6.29/drivers/ide/alim15x3.c
--- linux-2.6.29/drivers/ide/alim15x3.c 2009-03-24 00:12:14.000000000
+0100
+++ ml510-dev/linux-2.6.29/drivers/ide/alim15x3.c 2009-03-27
14:47:50.000000000 +0100
@@ -401,7 +401,8 @@
return cbl;
}
-#if !defined(CONFIG_SPARC64) && !defined(CONFIG_PPC)
+#if !defined(CONFIG_SPARC64)
+// && !defined(CONFIG_PPC)
/**
* init_hwif_ali15x3 - Initialize the ALI IDE x86 stuff
* @hwif: interface to configure
^ permalink raw reply
* [PATCH] Fix highmem build failure
From: Kumar Gala @ 2009-04-01 21:33 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linuxppc-dev, linux-kernel
The following commit breaks PPC builds with CONFIG_HIGHMEM=y
commit f4112de6b679d84bd9b9681c7504be7bdfb7c7d5
Author: Akinobu Mita <akinobu.mita@gmail.com>
Date: Tue Mar 31 15:23:25 2009 -0700
mm: introduce debug_kmap_atomic
We get:
CC init/main.o
In file included from include/linux/highmem.h:25,
from include/linux/pagemap.h:11,
from include/linux/mempolicy.h:63,
from init/main.c:53:
linux-2.6/arch/powerpc/include/asm/highmem.h: In function 'kmap_atomic_prot':
linux-2.6/arch/powerpc/include/asm/highmem.h:98: error: implicit declaration of function 'debug_kmap_atomic'
In file included from include/linux/pagemap.h:11,
from include/linux/mempolicy.h:63,
from init/main.c:53:
include/linux/highmem.h: At top level:
include/linux/highmem.h:196: warning: conflicting types for 'debug_kmap_atomic'
include/linux/highmem.h:196: error: static declaration of 'debug_kmap_atomic' follows non-static declaration
linux-2.6/include/asm/highmem.h:98: error: previous implicit declaration of 'debug_kmap_atomic' was here
make[1]: *** [init/main.o] Error 1
make: *** [init] Error 2
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
include/linux/highmem.h | 25 +++++++++++++------------
1 files changed, 13 insertions(+), 12 deletions(-)
diff --git a/include/linux/highmem.h b/include/linux/highmem.h
index 7ff5c55..577b53d 100644
--- a/include/linux/highmem.h
+++ b/include/linux/highmem.h
@@ -20,6 +20,19 @@ static inline void flush_kernel_dcache_page(struct page *page)
#endif
#ifdef CONFIG_HIGHMEM
+#include <asm/kmap_types.h>
+
+#if defined(CONFIG_DEBUG_HIGHMEM) && defined(CONFIG_TRACE_IRQFLAGS_SUPPORT)
+
+void debug_kmap_atomic(enum km_type type);
+
+#else
+
+static inline void debug_kmap_atomic(enum km_type type)
+{
+}
+
+#endif
#include <asm/highmem.h>
@@ -187,16 +200,4 @@ static inline void copy_highpage(struct page *to, struct page *from)
kunmap_atomic(vto, KM_USER1);
}
-#if defined(CONFIG_DEBUG_HIGHMEM) && defined(CONFIG_TRACE_IRQFLAGS_SUPPORT)
-
-void debug_kmap_atomic(enum km_type type);
-
-#else
-
-static inline void debug_kmap_atomic(enum km_type type)
-{
-}
-
-#endif
-
#endif /* _LINUX_HIGHMEM_H */
--
1.5.6.6
^ permalink raw reply related
* [PATCH] powerpc ptrace block-step
From: Roland McGrath @ 2009-04-01 21:59 UTC (permalink / raw)
To: Maynard Johnson; +Cc: linuxppc-dev, utrace-devel
Maynard asked about user_enable_block_step() support on powerpc.
This is the old patch I've posted before. I haven't even tried
to compile it lately, but it rebased cleanly.
AFAIK the only reason this didn't go in several months ago was waiting
for someone to decide what the right arch_has_block_step() condition was,
i.e. if it needs to check some cpu_feature or chip identifier bits.
I had hoped that I had passed the buck then to ppc folks to figure that out
and make it so. But it does not appear to have happened.
Note you can drop the #define PTRACE_SINGLEBLOCK if you want to be
conservative and not touch the user (ptrace) ABI yet. Then Maynard
could beat on it with internal uses (utrace) before you worry about
whether userland expects the new ptrace request macro to exist.
Thanks,
Roland
---
>From 2482ed1a0ced9caf964275889ea2315916e84ada Mon Sep 17 00:00:00 2001
From: Roland McGrath <roland@redhat.com>
Date: Thu, 1 May 2008 23:40:58 -0700
Subject: [PATCH] powerpc ptrace block-step
This adds block-step support on powerpc,
including a PTRACE_SINGLEBLOCK request for ptrace.
Signed-off-by: Roland McGrath <roland@redhat.com>
---
arch/powerpc/include/asm/ptrace.h | 4 ++++
arch/powerpc/kernel/ptrace.c | 19 ++++++++++++++++++-
2 files changed, 22 insertions(+), 1 deletions(-)
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index c9c678f..d7692b8 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -135,7 +135,9 @@ do { \
* These are defined as per linux/ptrace.h, which see.
*/
#define arch_has_single_step() (1)
+#define arch_has_block_step() (1)
extern void user_enable_single_step(struct task_struct *);
+extern void user_enable_block_step(struct task_struct *);
extern void user_disable_single_step(struct task_struct *);
#endif /* __ASSEMBLY__ */
@@ -288,4 +290,6 @@ extern void user_disable_single_step(struct task_struct *);
#define PPC_PTRACE_PEEKUSR_3264 0x91
#define PPC_PTRACE_POKEUSR_3264 0x90
+#define PTRACE_SINGLEBLOCK 0x100 /* resume execution until next branch */
+
#endif /* _ASM_POWERPC_PTRACE_H */
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c
index 3635be6..656fea2 100644
--- a/arch/powerpc/kernel/ptrace.c
+++ b/arch/powerpc/kernel/ptrace.c
@@ -707,12 +707,29 @@ void user_enable_single_step(struct task_struct *task)
task->thread.dbcr0 |= DBCR0_IDM | DBCR0_IC;
regs->msr |= MSR_DE;
#else
+ regs->msr &= ~MSR_BE;
regs->msr |= MSR_SE;
#endif
}
set_tsk_thread_flag(task, TIF_SINGLESTEP);
}
+void user_enable_block_step(struct task_struct *task)
+{
+ struct pt_regs *regs = task->thread.regs;
+
+ if (regs != NULL) {
+#if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
+ task->thread.dbcr0 = DBCR0_IDM | DBCR0_BT;
+ regs->msr |= MSR_DE;
+#else
+ regs->msr &= ~MSR_SE;
+ regs->msr |= MSR_BE;
+#endif
+ }
+ set_tsk_thread_flag(task, TIF_SINGLESTEP);
+}
+
void user_disable_single_step(struct task_struct *task)
{
struct pt_regs *regs = task->thread.regs;
@@ -729,7 +746,7 @@ void user_disable_single_step(struct task_struct *task)
task->thread.dbcr0 &= ~(DBCR0_IC | DBCR0_IDM);
regs->msr &= ~MSR_DE;
#else
- regs->msr &= ~MSR_SE;
+ regs->msr &= ~(MSR_SE | MSR_BE);
#endif
}
clear_tsk_thread_flag(task, TIF_SINGLESTEP);
--
1.6.0.6
^ permalink raw reply related
* Re: Problem with module_init?
From: Benjamin Herrenschmidt @ 2009-04-01 22:24 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev, Sean MacLennan
In-Reply-To: <20090401112756.GA14171@yoda.jdub.homelinux.org>
On Wed, 2009-04-01 at 07:27 -0400, Josh Boyer wrote:
>
> I'm assuming this is the result of a git-bisect run?
>
> Can I also assume you were loading the module on your Warp board?
>
> Ben, have you tested module loads on 4xx since you redid this?
>
I must shamefully admit almost never testing modules ... I always
netboot zImages with all the drivers I need built-in.
I suspect I just screwed up the definition of PAGE_KERNEL_EXEC or
something like that. I'll have a look.
Cheers,
Ben.
^ permalink raw reply
* Resend: /proc/<pid>/maps offset output broken in 2.6.29
From: Chris Friesen @ 2009-04-01 23:18 UTC (permalink / raw)
To: linuxppc-dev, linux-kernel-owner, Benjamin Herrenschmidt
In-Reply-To: <49CA8501.1000000@nortel.com>
Resending due to lack of response to original post.
I was validating some code dealing with /proc/<pid>/maps on 2.6.29 and
was surprised when it failed. It turns out that at least on my ppc64 G5
machine the offset value for the last entry is strange--it shows up as a
64-bit value even though the process itself is only 32-bit.
This behaviour also shows up in 2.6.25, but doesn't in 2.6.14. I
haven't yet tested anything else in between.
[cfriesen@localhost cfriesen]$ cat /proc/self/maps
00100000-00103000 r-xp 00100000 00:00 0 [vdso]
0fe70000-0ffbf000 r-xp 00000000 08:03 4312393 /lib/tls/libc-2.3.3.so
0ffbf000-0ffc0000 ---p 0014f000 08:03 4312393 /lib/tls/libc-2.3.3.so
0ffc0000-0ffc2000 r--p 00150000 08:03 4312393 /lib/tls/libc-2.3.3.so
0ffc2000-0ffc6000 rwxp 00152000 08:03 4312393 /lib/tls/libc-2.3.3.so
0ffc6000-0ffc8000 rwxp 0ffc6000 00:00 0
0ffd0000-0ffec000 r-xp 00000000 08:03 4309011 /lib/ld-2.3.3.so
0fff0000-0fff1000 r--p 00020000 08:03 4309011 /lib/ld-2.3.3.so
0fff1000-0fff2000 rwxp 00021000 08:03 4309011 /lib/ld-2.3.3.so
10000000-10004000 r-xp 00000000 08:03 917536 /bin/cat
10013000-10015000 rwxp 00003000 08:03 917536 /bin/cat
10015000-10036000 rwxp 10015000 00:00 0 [heap]
f7deb000-f7feb000 r--p 00000000 08:03 2560322
/usr/lib/locale/locale-archive
f7feb000-f7fec000 rw-p f7feb000 00:00 0
ffe6d000-ffe82000 rw-p ffffffeb000 00:00 0 [stack]
I'm at a loss to explain what's going on here. Anyone got any ideas?
Thanks,
Chris
^ permalink raw reply
* Re: [PATCH 6/8] --- arch/powerpc/boot/dts/socrates.dts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
From: David Gibson @ 2009-04-01 23:57 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <49D35728.1060107@grandegger.com>
On Wed, Apr 01, 2009 at 01:59:36PM +0200, Wolfgang Grandegger wrote:
> David Gibson wrote:
> > On Wed, Apr 01, 2009 at 09:31:34AM +0200, Wolfgang Grandegger wrote:
> >> Hi David,
> >>
> >> this patch went out by mistake, sorry.
> >>
> >> David Gibson wrote:
> >>> On Tue, Mar 31, 2009 at 02:37:33PM +0200, Wolfgang Grandegger wrote:
> >>>> Index: linux-2.6/arch/powerpc/boot/dts/socrates.dts
> >>>> ===================================================================
> >>>> --- linux-2.6.orig/arch/powerpc/boot/dts/socrates.dts 2009-03-31 13:24:38.078719288 +0200
> >>>> +++ linux-2.6/arch/powerpc/boot/dts/socrates.dts 2009-03-31 13:47:56.986720719 +0200
> >>>> @@ -52,6 +52,7 @@
> >>>> soc8544@e0000000 {
> >>>> #address-cells = <1>;
> >>>> #size-cells = <1>;
> >>>> + device_type = "soc";
> >>> You should not be adding device_type to a new board's dts. You
> >>> *especially* shouldn't be doing that with no patch comment explaining
> >>> why.
> >> In the final patch I have removed the device_type = "soc", but it makes
> >> trouble as some mpc85xx rely on it.
> >
> > Um.. what? Some mpc85xx? This is the dts for *one specific board*, I
> > don't see how something that affects "some mpc85xx" is relevant.
>
> Well, to be more precise, it affects all boards using CONFIG_FSL_SOC
> because they use functions searching for the device type "soc", e.g.
> fsl_get_sys_freq():
>
> http://lxr.linux.no/linux+v2.6.29/arch/powerpc/sysdev/fsl_soc.c#L80
>
> This needs to be fixed before the line 'device_type = "soc"' can be removed.
Gah. I had been under the impression that had been fixed already.
Kumar! Get your house in order!
Ok, I guess it will have to stay for now, just as long as the new
style marker in compatible is there as well.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ permalink raw reply
* Re: [PATCH 6/8] --- arch/powerpc/boot/dts/socrates.dts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-)
From: David Gibson @ 2009-04-01 23:58 UTC (permalink / raw)
To: Anton Vorontsov; +Cc: linuxppc-dev, devicetree-discuss
In-Reply-To: <20090401123029.GA31909@oksana.dev.rtsoft.ru>
On Wed, Apr 01, 2009 at 04:30:29PM +0400, Anton Vorontsov wrote:
> On Wed, Apr 01, 2009 at 10:09:55PM +1100, David Gibson wrote:
> > On Wed, Apr 01, 2009 at 09:31:34AM +0200, Wolfgang Grandegger wrote:
> > > Hi David,
> > >
> > > this patch went out by mistake, sorry.
> > >
> > > David Gibson wrote:
> > > > On Tue, Mar 31, 2009 at 02:37:33PM +0200, Wolfgang Grandegger wrote:
> > > >> Index: linux-2.6/arch/powerpc/boot/dts/socrates.dts
> > > >> ===================================================================
> > > >> --- linux-2.6.orig/arch/powerpc/boot/dts/socrates.dts 2009-03-31 13:24:38.078719288 +0200
> > > >> +++ linux-2.6/arch/powerpc/boot/dts/socrates.dts 2009-03-31 13:47:56.986720719 +0200
> > > >> @@ -52,6 +52,7 @@
> > > >> soc8544@e0000000 {
> > > >> #address-cells = <1>;
> > > >> #size-cells = <1>;
> > > >> + device_type = "soc";
> > > >
> > > > You should not be adding device_type to a new board's dts. You
> > > > *especially* shouldn't be doing that with no patch comment explaining
> > > > why.
> > >
> > > In the final patch I have removed the device_type = "soc", but it makes
> > > trouble as some mpc85xx rely on it.
> >
> > Um.. what? Some mpc85xx? This is the dts for *one specific board*, I
> > don't see how something that affects "some mpc85xx" is relevant.
>
> Not some, but *all* mpc85xx. The thing is that U-Boot is searching
> for device_type = "soc" to fixup some properties (for example,
> bus-frequency) for all mpc85xx parts, so you can't easily remove
> the device_type w/o breaking boot for firmwares that customers have
> pre-programmed in their products.
I thought that was fixed in current u-boot versions.
> Note that upgrading firmware without JTAG is dangerous, so it's not
> an option to "force" everybody to upgrade their firmware just
> because we want to remove some cruft from the device tree.
I realise that, but again this is a *new board*, which presumably can
use an up-to-date u-boot version.
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
^ 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