* Re: MPIC cleanup series
From: Benjamin Herrenschmidt @ 2011-11-28 20:58 UTC (permalink / raw)
To: Kyle Moffett; +Cc: linuxppc-dev
In-Reply-To: <CAGZ=bqJZdN-gpeBW+EdE7Dd=qsNzhwbFr8hBCRqMM72VkT8W7g@mail.gmail.com>
On Mon, 2011-11-28 at 15:48 -0500, Kyle Moffett wrote:
> On Sun, Nov 27, 2011 at 18:51, Benjamin Herrenschmidt
> <benh@kernel.crashing.org> wrote:
> > Overall I really look your series. It doesn't quite apply cleanly
> > anymore so I'll as you for a new shoot after you address the comments
> > below, at which point, if you're fast enough, I'll stick it in -next :-)
>
> Awesome! Thanks!
>
> As I mentioned before, I have precious little of the hardware to test
> this all on, so I hope I don't break anything. At minimum I need to
> do a final build-and-run test on my e500 boards before I send it out.
> :-D
That's ok, I was planning on letting it simmer in -test for a week or
so, giving myself time to test on a range of powermacs etc...
> > Just a couple of comments on some of the patches:
> >
> > - 5/10: search for open-pic device-tree node if NULL
> >
> > The idea is fine, however most callers ignore the device-type and only
> > compare on compatible, while you replace that with a match entry that
> > seems to require matching on both. This is likely to break stuff. The
> > "type" part of te march entry should be NULL I believe.
>
> If you re-read that, the match table used if no of_node is passed in
> has *two* separate entries, one of them with a "type" and the other
> with a "compatible", as opposed to a single entry which matches both
> "type" and "compatible".
Oh, my bad. Ok.
> There are a lot of callers which do:
> dnp = of_find_node_by_type(NULL, "open-pic");
>
> So I doubt I can remove the "type" entry all together, unfortunately.
>
>
> > - 9/10: cache the node
> >
> > of_node_get() is your friend.
>
> Yes, I actually messed this one up in the prior patch too, thanks for
> noticing. It should all be fixed now.
>
>
> > - 10/10: Makes me a bit nervous. It 'looks' right but I wouldn't bet on
> > Apple device-trees being sane vs. chaining. I would like a test that
> > doesn't do the cascade if the mpic is a primary to at least limit the
> > risk of messup.
>
> Oh, you mean to wrap that block like this?
>
> if (mpic->flags & MPIC_SECONDARY) {
> virq = irq_of_parse_and_map(mpic->node, 0);
> ...
> }
Yes.
> Sure, makes sense to me. I've made that change.
>
> Thanks for the review!
Thanks. Re-post the whole series and I'll merge it.
Cheers,
Ben.
^ permalink raw reply
* Re: MPIC cleanup series
From: Kyle Moffett @ 2011-11-28 20:48 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev
In-Reply-To: <1322437884.23348.30.camel@pasglop>
On Sun, Nov 27, 2011 at 18:51, Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> Overall I really look your series. It doesn't quite apply cleanly
> anymore so I'll as you for a new shoot after you address the comments
> below, at which point, if you're fast enough, I'll stick it in -next :-)
Awesome! Thanks!
As I mentioned before, I have precious little of the hardware to test
this all on, so I hope I don't break anything. At minimum I need to
do a final build-and-run test on my e500 boards before I send it out.
:-D
> Just a couple of comments on some of the patches:
>
> =C2=A0- 5/10: search for open-pic device-tree node if NULL
>
> The idea is fine, however most callers ignore the device-type and only
> compare on compatible, while you replace that with a match entry that
> seems to require matching on both. This is likely to break stuff. The
> "type" part of te march entry should be NULL I believe.
If you re-read that, the match table used if no of_node is passed in
has *two* separate entries, one of them with a "type" and the other
with a "compatible", as opposed to a single entry which matches both
"type" and "compatible".
There are a lot of callers which do:
dnp =3D of_find_node_by_type(NULL, "open-pic");
So I doubt I can remove the "type" entry all together, unfortunately.
> =C2=A0- 9/10: cache the node
>
> of_node_get() is your friend.
Yes, I actually messed this one up in the prior patch too, thanks for
noticing. It should all be fixed now.
> =C2=A0- 10/10: Makes me a bit nervous. It 'looks' right but I wouldn't be=
t on
> Apple device-trees being sane vs. chaining. I would like a test that
> doesn't do the cascade if the mpic is a primary to at least limit the
> risk of messup.
Oh, you mean to wrap that block like this?
if (mpic->flags & MPIC_SECONDARY) {
virq =3D irq_of_parse_and_map(mpic->node, 0);
...
}
Sure, makes sense to me. I've made that change.
Thanks for the review!
Cheers,
Kyle Moffett
--=20
Curious about my work on the Debian powerpcspe port?
I'm keeping a blog here: http://pureperl.blogspot.com/
^ permalink raw reply
* Re: [RFC PATCH v2 4/4] cpuidle: (POWER) Handle power_save=off
From: Benjamin Herrenschmidt @ 2011-11-28 20:39 UTC (permalink / raw)
To: Deepthi Dharwar; +Cc: linuxppc-dev, linux-pm, linux-kernel, linux-pm
In-Reply-To: <4ED36A7D.9070308@linux.vnet.ibm.com>
On Mon, 2011-11-28 at 16:33 +0530, Deepthi Dharwar wrote:
> On an LPAR if cpuidle is disabled, ppc_md.power_save is still set to
> cpuidle_idle_call by default here. This would result in calling of
> cpuidle_idle_call repeatedly, only for the call to return -ENODEV. The
> default idle is never executed.
> This would be a major design flaw. No fallback idle routine.
>
> We propose to fix this by checking the return value of
> ppc_md.power_save() call from void to int.
> Right now return value is void, but if we change this to int, this
> would solve two problems. One being removing the cast to a function
> pointer in the prev patch and this design flaw stated above.
>
> So by checking the return value of ppc_md.power_save(), we can invoke
> the default idle on failure. But my only concern is about the effects of
> changing the ppc_md.power_save() to return int on other powerpc
> architectures. Would it be a good idea to change the return type to int
> which would help us flag an error and fallback to default idle?
I would have preferred an approach where the cpuidle module sets
ppc_md.power_save when loaded and restores it when unloaded ... but that
would have to go into the cpuidle core as a powerpc specific tweak and
might not be generally well received.
So go for it, add the return value, but you'll have to update all the
idle functions (grep for power_save in arch/powerpc to find them).
Cheers,
Ben.
^ permalink raw reply
* Re: [RFC PATCH v2 1/4] cpuidle: (powerpc) Add cpu_idle_wait() to allow switching of idle routines
From: Benjamin Herrenschmidt @ 2011-11-28 20:35 UTC (permalink / raw)
To: Deepthi Dharwar; +Cc: linuxppc-dev, linux-pm, linux-kernel, linux-pm
In-Reply-To: <4ED36A37.3030409@linux.vnet.ibm.com>
On Mon, 2011-11-28 at 16:32 +0530, Deepthi Dharwar wrote:
> > Additionally, I'm a bit worried (but maybe we already discussed that a
> > while back, I don't know) but cpu_idle_wait() has "wait" in the name,
> > which makes me think it might need to actually -wait- for all cpus to
> > have come out of the function.
>
> cpu_idle_wait is used to ensure that all the CPUs discard old idle
> handler and update to new one. Required while changing idle
> handler on SMP systems.
>
> > Now your implementation doesn't provide that guarantee. It might be
> > fine, I don't know, but if it is, you'd better document it well in the
> > comments surrounding the code, because as it is, all you do is shoot an
> > interrupt which will cause the target CPU to eventually come out of idle
> > some time in the future.
>
>
> I was hoping that sending an explicit reschedule to the cpus would
> do the trick but sure we can add some documentation around the code.
Well, the question is what guarantee do you expect. Sending a reschedule
IPI will take the other CPUs out of the actual sleep mode, but it will
be some time from there back to getting out of the handler function
(first back out of hypervisor etc...).
The code as you implemented it doesn't wait for that to happen. It might
be fine ... or not. I don't know what semantics you are after precisely.
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Benjamin Herrenschmidt @ 2011-11-28 20:40 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev, paulus, Anton Blanchard
In-Reply-To: <F744714B-0527-415C-92BE-A5CB678F1C29@kernel.crashing.org>
On Mon, 2011-11-28 at 10:04 -0600, Kumar Gala wrote:
> > +#ifndef CONFIG_BOOKE
> > + {MSR_RI, "RI"},
>
> We have 'RI' on some BOOKE so lets allow for it to be decoded
>
> > + {MSR_LE, "LE"},
> > +#endif
> > {0, NULL}
> > };
>
> Since you're fixing this can you add the following for CONFIG_BOOKE:
>
> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
Please send a followup patch.
Cheers,
Ben.
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Scott Wood @ 2011-11-28 20:32 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev, paulus, Anton Blanchard
In-Reply-To: <CA+5PVA75TKyScsPfHXXPaHC3mobPRJ0_w48HGRJ1j_-7ktP3iA@mail.gmail.com>
On 11/28/2011 02:12 PM, Josh Boyer wrote:
> On Mon, Nov 28, 2011 at 3:04 PM, Scott Wood <scottwood@freescale.com> wrote:
>> On 11/28/2011 01:46 PM, Josh Boyer wrote:
>>> Could introduce BOOK3E_32 to cover cases like this.
>>
>> Why _32? These bits apply to 64-bit as well. MSR_CM is only for 64-bit.
>
> Because CONFIG_BOOK3E depeonds on PPC_BOOK3E_64. So either that
> dependency needs to go so it's selectable elsewhere, or a similarly
> intended PPC_BOOK3E_32 needs to get created. Or something.
I think that dependency should go, in any case. We already have
PPC_BOOK3E_64 for places that need to depend on that, and we don't want
to end up having this all over the place:
#if defined(CONFIG_PPC_BOOK3E_32) || defined(CONFIG_PPC_BOOK3E_64)
>> UCLE and PMM are present on pre-2.06 e500 cores as well.
>
> Sigh. Maybe there is no way to get un-ugly.
If we drop the 64-bit dependency, we could do this for UCLE if it really
needs to be omitted from a 4xx kernel:
#if defined(CONFIG_PPC_BOOK3E) || defined(CONFIG_E500)
PMM is not just a BookE thing, so if 4xx really needs to exclude it,
#ifndef CONFIG_4xx is the way to go.
I wouldn't bother unless 4xx is known to set these bits, though.
For GS and CM CONFIG_PPC_BOOK3E is OK, once 32-bit e500mc/e5500 kernels
start selecting it.
-Scott
^ permalink raw reply
* Re: sam460ex, sm501 incorrect device id with kernel >=linux-2.6.39
From: Anatolij Gustschin @ 2011-11-28 20:22 UTC (permalink / raw)
To: acrux; +Cc: linuxppc-dev
In-Reply-To: <20111128205655.fc4d3249.acrux_it@libero.it>
On Mon, 28 Nov 2011 20:56:55 +0100
acrux <acrux_it@libero.it> wrote:
...
> it seems to be an endianess issue but i didn't find when it was
> introduced. Really strange this kind of issue was never noticed
> bumping from 2.6.38.x to 2.6.39.x .
Look at commit bf5f0019046d596d613caf74722ba4994e153899
(video, sm501: add I/O functions for use on powerpc).
This is the issue, I think. Especially changes in include/linux/sm501.h
by this commit. Since CONFIG_PPC32 is defined for canyonlands,
ioread32be() is used to access the registers at PCI space which
is wrong. The patch was tested on tqm5200 with sm501 connected
on localbus, so using ioread32be() worked there. Your sm502 is on
PCI bus I suppose. This issue needs to be fixed.
HTH,
Anatolij
^ permalink raw reply
* Re: [PATCH-RFC 01/10] lib: move GENERIC_IOMAP to lib/Kconfig
From: Richard Kuo @ 2011-11-28 20:12 UTC (permalink / raw)
To: Michael S. Tsirkin
Cc: Nicolas Pitre, linux-mips, linux-m68k, linux-ia64, linux-sh,
linux, linux-pci, Jesse Barnes, Chen Liqin, Paul Mackerras,
H. Peter Anvin, sparclinux, Guan Xuetao, Lennox Wu, Jonas Bonn,
Jesper Nilsson, Russell King, linux-hexagon, Helge Deller, x86,
James E.J. Bottomley, Ingo Molnar, Geert Uytterhoeven, linux-arch,
Arend van Spriel, Matt Turner, Fenghua Yu, Lasse Collin,
Arnd Bergmann, Lucas De Marchi, microblaze-uclinux, Paul Bolle,
Rob Herring, Mikael Starvik, Ivan Kokshaysky, Franky Lin,
Thomas Gleixner, Fabio Baltieri, linux-arm-kernel,
Richard Henderson, Michael Ellerman, Michal Simek, Tony Luck,
linux-parisc, linux-cris-kernel, Paul Gortmaker, linux-kernel,
Ralf Baechle, Kyle McMartin, Paul Mundt, linux-alpha,
Olof Johansson, Andrew Morton, linuxppc-dev, David S. Miller
In-Reply-To: <5aed7b7e1dbc8a50ebd6986245df8054fd05b7cd.1322163031.git.mst@redhat.com>
On Thu, Nov 24, 2011 at 10:15:42PM +0200, Michael S. Tsirkin wrote:
> define GENERIC_IOMAP in a central location
> instead of all architectures. This will be helpful
> for the follow-up patch which makes it select
> other configs. Code is also a bit shorter this way.
For the Hexagon config,
Acked-by: Richard Kuo <rkuo@codeaurora.org>
--
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Josh Boyer @ 2011-11-28 20:12 UTC (permalink / raw)
To: Scott Wood; +Cc: linuxppc-dev, paulus, Anton Blanchard
In-Reply-To: <4ED3E951.8000005@freescale.com>
On Mon, Nov 28, 2011 at 3:04 PM, Scott Wood <scottwood@freescale.com> wrote=
:
> On 11/28/2011 01:46 PM, Josh Boyer wrote:
>> On Mon, Nov 28, 2011 at 2:30 PM, Scott Wood <scottwood@freescale.com> wr=
ote:
>>> On 11/28/2011 10:23 AM, Josh Boyer wrote:
>>>> On Mon, Nov 28, 2011 at 11:04 AM, Kumar Gala <galak@kernel.crashing.or=
g> wrote:
>>>>>
>>>>> Since you're fixing this can you add the following for CONFIG_BOOKE:
>>>>>
>>>>> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
>
> PMM is not just BookE, and is already present in the patch.
>
> RI is present on e500mc (despite being reserved in book3e), so might not
> want to stick that inside #ifndef CONFIG_BOOKE.
>
>>> Not all bits are going to exist on all CPUs -- does 4xx use these bits
>>> to mean something different?
>>
>> No, marked as reserved. =A0However, given the patch shows up in human
>> readable output, I don't think we want reserved bits being decoded and
>> showing up inadvertently.
>
> Do the bits ever actually get set on 4xx (documented or otherwise), or
> is this a theoretical concern?
>
> If 4xx must be excluded, use something like:
> #if defined(CONFIG_BOOKE) && !defined(CONFIG_4xx)
I was going for something a bit simpler. Basically, CONFIG_BOOKE
should be treated as a legacy Kconfig variable that has nothing to do
with ISA 2.06 because it existed before that and is used by things
that aren't compliant with 2.06 (both FSL and 4xx). If we use it for
things that show up on these non-compliant CPUs, we'll have to
continually add the !defined(WHATEVER) and that just gets ugly over
time.
> Do we also need to patch out things like MSR_VEC at runtime, in case it
> randomly shows up on a pre-Altivec CPU?
>
>> Could introduce BOOK3E_32 to cover cases like this.
>
> Why _32? =A0These bits apply to 64-bit as well. =A0MSR_CM is only for 64-=
bit.
Because CONFIG_BOOK3E depeonds on PPC_BOOK3E_64. So either that
dependency needs to go so it's selectable elsewhere, or a similarly
intended PPC_BOOK3E_32 needs to get created. Or something.
> UCLE and PMM are present on pre-2.06 e500 cores as well.
Sigh. Maybe there is no way to get un-ugly.
josh
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Scott Wood @ 2011-11-28 20:04 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev, paulus, Anton Blanchard
In-Reply-To: <CA+5PVA4gxb-oHwFhZ_GrTjhD2URvjS3R7Sk-xZcCwKg77Meo_g@mail.gmail.com>
On 11/28/2011 01:46 PM, Josh Boyer wrote:
> On Mon, Nov 28, 2011 at 2:30 PM, Scott Wood <scottwood@freescale.com> wrote:
>> On 11/28/2011 10:23 AM, Josh Boyer wrote:
>>> On Mon, Nov 28, 2011 at 11:04 AM, Kumar Gala <galak@kernel.crashing.org> wrote:
>>>>
>>>> Since you're fixing this can you add the following for CONFIG_BOOKE:
>>>>
>>>> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
PMM is not just BookE, and is already present in the patch.
RI is present on e500mc (despite being reserved in book3e), so might not
want to stick that inside #ifndef CONFIG_BOOKE.
>> Not all bits are going to exist on all CPUs -- does 4xx use these bits
>> to mean something different?
>
> No, marked as reserved. However, given the patch shows up in human
> readable output, I don't think we want reserved bits being decoded and
> showing up inadvertently.
Do the bits ever actually get set on 4xx (documented or otherwise), or
is this a theoretical concern?
If 4xx must be excluded, use something like:
#if defined(CONFIG_BOOKE) && !defined(CONFIG_4xx)
Do we also need to patch out things like MSR_VEC at runtime, in case it
randomly shows up on a pre-Altivec CPU?
> Could introduce BOOK3E_32 to cover cases like this.
Why _32? These bits apply to 64-bit as well. MSR_CM is only for 64-bit.
UCLE and PMM are present on pre-2.06 e500 cores as well.
-Scott
^ permalink raw reply
* [RFC][PATCH] update FSL 16550 nodes to have...
From: Kumar Gala @ 2011-11-28 20:02 UTC (permalink / raw)
To: linuxppc-dev
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
---
* Need to fixup the commit message
arch/powerpc/boot/dts/asp834x-redboot.dts | 4 ++--
arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi | 4 ++--
arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi | 4 ++--
arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi | 4 ++--
arch/powerpc/boot/dts/gef_ppc9a.dts | 4 ++--
arch/powerpc/boot/dts/gef_sbc310.dts | 4 ++--
arch/powerpc/boot/dts/gef_sbc610.dts | 4 ++--
arch/powerpc/boot/dts/kmeter1.dts | 2 +-
arch/powerpc/boot/dts/kuroboxHD.dts | 4 ++--
arch/powerpc/boot/dts/kuroboxHG.dts | 4 ++--
arch/powerpc/boot/dts/mpc8308_p1m.dts | 4 ++--
arch/powerpc/boot/dts/mpc8308rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8313erdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8315erdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc832x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc832x_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8349emitx.dts | 4 ++--
arch/powerpc/boot/dts/mpc8349emitxgp.dts | 4 ++--
arch/powerpc/boot/dts/mpc834x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc836x_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc836x_rdk.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8377_wlan.dts | 4 ++--
arch/powerpc/boot/dts/mpc8378_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8378_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8379_mds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8379_rdb.dts | 4 ++--
arch/powerpc/boot/dts/mpc8540ads.dts | 4 ++--
arch/powerpc/boot/dts/mpc8541cds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8555cds.dts | 4 ++--
arch/powerpc/boot/dts/mpc8610_hpcd.dts | 4 ++--
arch/powerpc/boot/dts/mpc8641_hpcn.dts | 4 ++--
arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts | 4 ++--
arch/powerpc/boot/dts/sbc8349.dts | 4 ++--
arch/powerpc/boot/dts/sbc8548.dts | 4 ++--
arch/powerpc/boot/dts/sbc8641d.dts | 4 ++--
arch/powerpc/boot/dts/socrates.dts | 4 ++--
arch/powerpc/boot/dts/storcenter.dts | 4 ++--
arch/powerpc/boot/dts/stxssa8555.dts | 4 ++--
arch/powerpc/boot/dts/tqm8540.dts | 4 ++--
arch/powerpc/boot/dts/tqm8541.dts | 4 ++--
arch/powerpc/boot/dts/tqm8548-bigflash.dts | 4 ++--
arch/powerpc/boot/dts/tqm8548.dts | 4 ++--
arch/powerpc/boot/dts/tqm8555.dts | 4 ++--
arch/powerpc/boot/dts/xcalibur1501.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5200.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5200_xmon.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5301.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5330.dts | 4 ++--
arch/powerpc/boot/dts/xpedite5370.dts | 4 ++--
51 files changed, 101 insertions(+), 101 deletions(-)
diff --git a/arch/powerpc/boot/dts/asp834x-redboot.dts b/arch/powerpc/boot/dts/asp834x-redboot.dts
index 261d10c..227290d 100644
--- a/arch/powerpc/boot/dts/asp834x-redboot.dts
+++ b/arch/powerpc/boot/dts/asp834x-redboot.dts
@@ -256,7 +256,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <400000000>;
interrupts = <9 0x8>;
@@ -266,7 +266,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <400000000>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
index 00fa1fd..5e268fd 100644
--- a/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/pq3-duart-0.dtsi
@@ -35,7 +35,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2 0 0>;
@@ -44,7 +44,7 @@ serial0: serial@4500 {
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2 0 0>;
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
index 66271e3..225c07b 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-0.dtsi
@@ -35,7 +35,7 @@
serial0: serial@11c500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11c500 0x100>;
clock-frequency = <0>;
interrupts = <36 2 0 0>;
@@ -44,7 +44,7 @@ serial0: serial@11c500 {
serial1: serial@11c600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11c600 0x100>;
clock-frequency = <0>;
interrupts = <36 2 0 0>;
diff --git a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
index cf1a0ac..d23233a 100644
--- a/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
+++ b/arch/powerpc/boot/dts/fsl/qoriq-duart-1.dtsi
@@ -35,7 +35,7 @@
serial2: serial@11d500 {
cell-index = <2>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11d500 0x100>;
clock-frequency = <0>;
interrupts = <37 2 0 0>;
@@ -44,7 +44,7 @@ serial2: serial@11d500 {
serial3: serial@11d600 {
cell-index = <3>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x11d600 0x100>;
clock-frequency = <0>;
interrupts = <37 2 0 0>;
diff --git a/arch/powerpc/boot/dts/gef_ppc9a.dts b/arch/powerpc/boot/dts/gef_ppc9a.dts
index 2266bbb..38dcb96 100644
--- a/arch/powerpc/boot/dts/gef_ppc9a.dts
+++ b/arch/powerpc/boot/dts/gef_ppc9a.dts
@@ -339,7 +339,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -349,7 +349,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/gef_sbc310.dts b/arch/powerpc/boot/dts/gef_sbc310.dts
index 429e87d..5ab8932 100644
--- a/arch/powerpc/boot/dts/gef_sbc310.dts
+++ b/arch/powerpc/boot/dts/gef_sbc310.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -347,7 +347,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/gef_sbc610.dts b/arch/powerpc/boot/dts/gef_sbc610.dts
index d81201a..d5341f5 100644
--- a/arch/powerpc/boot/dts/gef_sbc610.dts
+++ b/arch/powerpc/boot/dts/gef_sbc610.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <0x2a 0x2>;
@@ -347,7 +347,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <0x1c 0x2>;
diff --git a/arch/powerpc/boot/dts/kmeter1.dts b/arch/powerpc/boot/dts/kmeter1.dts
index d16bae1..983aee1 100644
--- a/arch/powerpc/boot/dts/kmeter1.dts
+++ b/arch/powerpc/boot/dts/kmeter1.dts
@@ -80,7 +80,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <264000000>;
interrupts = <9 0x8>;
diff --git a/arch/powerpc/boot/dts/kuroboxHD.dts b/arch/powerpc/boot/dts/kuroboxHD.dts
index 8d725d1..0a45451 100644
--- a/arch/powerpc/boot/dts/kuroboxHD.dts
+++ b/arch/powerpc/boot/dts/kuroboxHD.dts
@@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
serial0: serial@80004500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004500 0x8>;
clock-frequency = <97553800>;
current-speed = <9600>;
@@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
serial1: serial@80004600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004600 0x8>;
clock-frequency = <97553800>;
current-speed = <57600>;
diff --git a/arch/powerpc/boot/dts/kuroboxHG.dts b/arch/powerpc/boot/dts/kuroboxHG.dts
index b13a11e..0e758b3 100644
--- a/arch/powerpc/boot/dts/kuroboxHG.dts
+++ b/arch/powerpc/boot/dts/kuroboxHG.dts
@@ -84,7 +84,7 @@ XXXX add flash parts, rtc, ??
serial0: serial@80004500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004500 0x8>;
clock-frequency = <130041000>;
current-speed = <9600>;
@@ -95,7 +95,7 @@ XXXX add flash parts, rtc, ??
serial1: serial@80004600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x80004600 0x8>;
clock-frequency = <130041000>;
current-speed = <57600>;
diff --git a/arch/powerpc/boot/dts/mpc8308_p1m.dts b/arch/powerpc/boot/dts/mpc8308_p1m.dts
index 697b3f6..22b0832 100644
--- a/arch/powerpc/boot/dts/mpc8308_p1m.dts
+++ b/arch/powerpc/boot/dts/mpc8308_p1m.dts
@@ -233,7 +233,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -243,7 +243,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8308rdb.dts b/arch/powerpc/boot/dts/mpc8308rdb.dts
index a0bd188..f66d10d 100644
--- a/arch/powerpc/boot/dts/mpc8308rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8308rdb.dts
@@ -208,7 +208,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -218,7 +218,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8313erdb.dts b/arch/powerpc/boot/dts/mpc8313erdb.dts
index ac1eb32..1c836c6 100644
--- a/arch/powerpc/boot/dts/mpc8313erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8313erdb.dts
@@ -261,7 +261,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -271,7 +271,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8315erdb.dts b/arch/powerpc/boot/dts/mpc8315erdb.dts
index 4dd08c3..811848e 100644
--- a/arch/powerpc/boot/dts/mpc8315erdb.dts
+++ b/arch/powerpc/boot/dts/mpc8315erdb.dts
@@ -265,7 +265,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <133333333>;
interrupts = <9 0x8>;
@@ -275,7 +275,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <133333333>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc832x_mds.dts b/arch/powerpc/boot/dts/mpc832x_mds.dts
index 05ad8c9..da9c72d 100644
--- a/arch/powerpc/boot/dts/mpc832x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
@@ -105,7 +105,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -115,7 +115,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc832x_rdb.dts b/arch/powerpc/boot/dts/mpc832x_rdb.dts
index f4fadb23a..ff7b15b 100644
--- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
@@ -83,7 +83,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -93,7 +93,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8349emitx.dts b/arch/powerpc/boot/dts/mpc8349emitx.dts
index 505dc84..2608679 100644
--- a/arch/powerpc/boot/dts/mpc8349emitx.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitx.dts
@@ -283,7 +283,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <9 0x8>;
@@ -293,7 +293,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8349emitxgp.dts b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
index eb73211..6cd044d 100644
--- a/arch/powerpc/boot/dts/mpc8349emitxgp.dts
+++ b/arch/powerpc/boot/dts/mpc8349emitxgp.dts
@@ -189,7 +189,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <9 0x8>;
@@ -199,7 +199,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>; // from bootloader
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc834x_mds.dts b/arch/powerpc/boot/dts/mpc834x_mds.dts
index 230febb..4552864 100644
--- a/arch/powerpc/boot/dts/mpc834x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc834x_mds.dts
@@ -242,7 +242,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -252,7 +252,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc836x_mds.dts b/arch/powerpc/boot/dts/mpc836x_mds.dts
index 45cfa1c5..c0e450a 100644
--- a/arch/powerpc/boot/dts/mpc836x_mds.dts
+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
@@ -136,7 +136,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <264000000>;
interrupts = <9 0x8>;
@@ -146,7 +146,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <264000000>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc836x_rdk.dts b/arch/powerpc/boot/dts/mpc836x_rdk.dts
index bdf4459..b6e9aec 100644
--- a/arch/powerpc/boot/dts/mpc836x_rdk.dts
+++ b/arch/powerpc/boot/dts/mpc836x_rdk.dts
@@ -102,7 +102,7 @@
serial0: serial@4500 {
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
interrupts = <9 8>;
interrupt-parent = <&ipic>;
@@ -112,7 +112,7 @@
serial1: serial@4600 {
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
interrupts = <10 8>;
interrupt-parent = <&ipic>;
diff --git a/arch/powerpc/boot/dts/mpc8377_mds.dts b/arch/powerpc/boot/dts/mpc8377_mds.dts
index 855782c..cfccef5 100644
--- a/arch/powerpc/boot/dts/mpc8377_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8377_mds.dts
@@ -276,7 +276,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -286,7 +286,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8377_rdb.dts b/arch/powerpc/boot/dts/mpc8377_rdb.dts
index dbc1b98..353deff 100644
--- a/arch/powerpc/boot/dts/mpc8377_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8377_rdb.dts
@@ -321,7 +321,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -331,7 +331,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8377_wlan.dts b/arch/powerpc/boot/dts/mpc8377_wlan.dts
index 9ea7830..ef4a305 100644
--- a/arch/powerpc/boot/dts/mpc8377_wlan.dts
+++ b/arch/powerpc/boot/dts/mpc8377_wlan.dts
@@ -304,7 +304,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -314,7 +314,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8378_mds.dts b/arch/powerpc/boot/dts/mpc8378_mds.dts
index f70cf60..538fcb9 100644
--- a/arch/powerpc/boot/dts/mpc8378_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8378_mds.dts
@@ -315,7 +315,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -325,7 +325,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8378_rdb.dts b/arch/powerpc/boot/dts/mpc8378_rdb.dts
index 3447eb9..32333a9 100644
--- a/arch/powerpc/boot/dts/mpc8378_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8378_rdb.dts
@@ -321,7 +321,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -331,7 +331,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8379_mds.dts b/arch/powerpc/boot/dts/mpc8379_mds.dts
index 645ec51..5387092 100644
--- a/arch/powerpc/boot/dts/mpc8379_mds.dts
+++ b/arch/powerpc/boot/dts/mpc8379_mds.dts
@@ -313,7 +313,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -323,7 +323,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8379_rdb.dts b/arch/powerpc/boot/dts/mpc8379_rdb.dts
index 15560c6..46224c2 100644
--- a/arch/powerpc/boot/dts/mpc8379_rdb.dts
+++ b/arch/powerpc/boot/dts/mpc8379_rdb.dts
@@ -319,7 +319,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -329,7 +329,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/mpc8540ads.dts b/arch/powerpc/boot/dts/mpc8540ads.dts
index 8d1bf0f..f99fb11 100644
--- a/arch/powerpc/boot/dts/mpc8540ads.dts
+++ b/arch/powerpc/boot/dts/mpc8540ads.dts
@@ -243,7 +243,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -253,7 +253,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8541cds.dts b/arch/powerpc/boot/dts/mpc8541cds.dts
index 87ff965..0f5e939 100644
--- a/arch/powerpc/boot/dts/mpc8541cds.dts
+++ b/arch/powerpc/boot/dts/mpc8541cds.dts
@@ -209,7 +209,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -219,7 +219,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8555cds.dts b/arch/powerpc/boot/dts/mpc8555cds.dts
index 5c5614f..fe10438 100644
--- a/arch/powerpc/boot/dts/mpc8555cds.dts
+++ b/arch/powerpc/boot/dts/mpc8555cds.dts
@@ -209,7 +209,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -219,7 +219,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8610_hpcd.dts b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
index 83c3218..6a109a0 100644
--- a/arch/powerpc/boot/dts/mpc8610_hpcd.dts
+++ b/arch/powerpc/boot/dts/mpc8610_hpcd.dts
@@ -175,7 +175,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -186,7 +186,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn.dts b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
index fb8640e..1e8666c 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
@@ -328,7 +328,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -338,7 +338,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
index 8be8e70..fd4cd4d 100644
--- a/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
+++ b/arch/powerpc/boot/dts/mpc8641_hpcn_36b.dts
@@ -328,7 +328,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -338,7 +338,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/sbc8349.dts b/arch/powerpc/boot/dts/sbc8349.dts
index 0dc90f9..b1e45a8 100644
--- a/arch/powerpc/boot/dts/sbc8349.dts
+++ b/arch/powerpc/boot/dts/sbc8349.dts
@@ -222,7 +222,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <9 0x8>;
@@ -232,7 +232,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <10 0x8>;
diff --git a/arch/powerpc/boot/dts/sbc8548.dts b/arch/powerpc/boot/dts/sbc8548.dts
index 94a3322..77be771 100644
--- a/arch/powerpc/boot/dts/sbc8548.dts
+++ b/arch/powerpc/boot/dts/sbc8548.dts
@@ -316,7 +316,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <0x2a 0x2>;
@@ -326,7 +326,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <0x2a 0x2>;
diff --git a/arch/powerpc/boot/dts/sbc8641d.dts b/arch/powerpc/boot/dts/sbc8641d.dts
index ee5538f..56bebce 100644
--- a/arch/powerpc/boot/dts/sbc8641d.dts
+++ b/arch/powerpc/boot/dts/sbc8641d.dts
@@ -347,7 +347,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -357,7 +357,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <28 2>;
diff --git a/arch/powerpc/boot/dts/socrates.dts b/arch/powerpc/boot/dts/socrates.dts
index 38c3540..134a5ff 100644
--- a/arch/powerpc/boot/dts/socrates.dts
+++ b/arch/powerpc/boot/dts/socrates.dts
@@ -199,7 +199,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -209,7 +209,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/storcenter.dts b/arch/powerpc/boot/dts/storcenter.dts
index eab680c..2a55573 100644
--- a/arch/powerpc/boot/dts/storcenter.dts
+++ b/arch/powerpc/boot/dts/storcenter.dts
@@ -74,7 +74,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x20>;
clock-frequency = <97553800>; /* Hz */
current-speed = <115200>;
@@ -85,7 +85,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x20>;
clock-frequency = <97553800>; /* Hz */
current-speed = <9600>;
diff --git a/arch/powerpc/boot/dts/stxssa8555.dts b/arch/powerpc/boot/dts/stxssa8555.dts
index 49efd44..4f166b0 100644
--- a/arch/powerpc/boot/dts/stxssa8555.dts
+++ b/arch/powerpc/boot/dts/stxssa8555.dts
@@ -210,7 +210,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -220,7 +220,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8540.dts b/arch/powerpc/boot/dts/tqm8540.dts
index 0a4cedb..ed264d9 100644
--- a/arch/powerpc/boot/dts/tqm8540.dts
+++ b/arch/powerpc/boot/dts/tqm8540.dts
@@ -250,7 +250,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -260,7 +260,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8541.dts b/arch/powerpc/boot/dts/tqm8541.dts
index f49d091..9252421 100644
--- a/arch/powerpc/boot/dts/tqm8541.dts
+++ b/arch/powerpc/boot/dts/tqm8541.dts
@@ -224,7 +224,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -234,7 +234,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/tqm8548-bigflash.dts b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
index 9452c3c..7adab94 100644
--- a/arch/powerpc/boot/dts/tqm8548-bigflash.dts
+++ b/arch/powerpc/boot/dts/tqm8548-bigflash.dts
@@ -305,7 +305,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
@@ -316,7 +316,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/tqm8548.dts b/arch/powerpc/boot/dts/tqm8548.dts
index 619776f..589860e 100644
--- a/arch/powerpc/boot/dts/tqm8548.dts
+++ b/arch/powerpc/boot/dts/tqm8548.dts
@@ -305,7 +305,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
@@ -316,7 +316,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/tqm8555.dts b/arch/powerpc/boot/dts/tqm8555.dts
index 81bad8c..aa6ff0d 100644
--- a/arch/powerpc/boot/dts/tqm8555.dts
+++ b/arch/powerpc/boot/dts/tqm8555.dts
@@ -224,7 +224,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
@@ -234,7 +234,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>; // reg base, size
clock-frequency = <0>; // should we fill in in uboot?
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xcalibur1501.dts b/arch/powerpc/boot/dts/xcalibur1501.dts
index ac0a617..cc00f4d 100644
--- a/arch/powerpc/boot/dts/xcalibur1501.dts
+++ b/arch/powerpc/boot/dts/xcalibur1501.dts
@@ -531,7 +531,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -542,7 +542,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5200.dts b/arch/powerpc/boot/dts/xpedite5200.dts
index c41a80c..8fd7b70 100644
--- a/arch/powerpc/boot/dts/xpedite5200.dts
+++ b/arch/powerpc/boot/dts/xpedite5200.dts
@@ -333,7 +333,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
current-speed = <115200>;
@@ -344,7 +344,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
current-speed = <115200>;
diff --git a/arch/powerpc/boot/dts/xpedite5200_xmon.dts b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
index c0efcbb..0baa828 100644
--- a/arch/powerpc/boot/dts/xpedite5200_xmon.dts
+++ b/arch/powerpc/boot/dts/xpedite5200_xmon.dts
@@ -337,7 +337,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
current-speed = <9600>;
@@ -348,7 +348,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
current-speed = <9600>;
diff --git a/arch/powerpc/boot/dts/xpedite5301.dts b/arch/powerpc/boot/dts/xpedite5301.dts
index db7faf5..53c1c6a 100644
--- a/arch/powerpc/boot/dts/xpedite5301.dts
+++ b/arch/powerpc/boot/dts/xpedite5301.dts
@@ -441,7 +441,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -452,7 +452,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5330.dts b/arch/powerpc/boot/dts/xpedite5330.dts
index c364ca6..2152259 100644
--- a/arch/powerpc/boot/dts/xpedite5330.dts
+++ b/arch/powerpc/boot/dts/xpedite5330.dts
@@ -477,7 +477,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -488,7 +488,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
diff --git a/arch/powerpc/boot/dts/xpedite5370.dts b/arch/powerpc/boot/dts/xpedite5370.dts
index 7a8a4af..11dbda1 100644
--- a/arch/powerpc/boot/dts/xpedite5370.dts
+++ b/arch/powerpc/boot/dts/xpedite5370.dts
@@ -439,7 +439,7 @@
serial0: serial@4500 {
cell-index = <0>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4500 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
@@ -450,7 +450,7 @@
serial1: serial@4600 {
cell-index = <1>;
device_type = "serial";
- compatible = "ns16550";
+ compatible = "fsl,ns16550", "ns16550";
reg = <0x4600 0x100>;
clock-frequency = <0>;
interrupts = <42 2>;
--
1.7.3.4
^ permalink raw reply related
* Re: [PATCH 1/6] powerpc/time: Handle wrapping of decrementer
From: Benjamin Herrenschmidt @ 2011-11-28 20:01 UTC (permalink / raw)
To: Scott Wood; +Cc: johnstul, linuxppc-dev, paulus, Anton Blanchard, miltonm
In-Reply-To: <4ED3C875.5050002@freescale.com>
On Mon, 2011-11-28 at 11:44 -0600, Scott Wood wrote:
> > -#ifndef CONFIG_BOOKE
> > - /* On server, re-trigger the decrementer if it went negative since
> > - * some processors only trigger on edge transitions of the sign bit.
> > - *
> > - * BookE has a level sensitive decrementer (latches in TSR) so we
> > - * don't need that
> > + /*
> > + * Trigger the decrementer if we have a pending event. Some processors
> > + * only trigger on edge transitions of the sign bit. We might also
> > + * have disabled interrupts long enough that the decrementer wrapped
> > + * to positive.
> > */
> > - if ((int)mfspr(SPRN_DEC) < 0)
> > - mtspr(SPRN_DEC, 1);
> > -#endif /* CONFIG_BOOKE */
> > + decrementer_check_overflow();
>
> Where did the #ifndef CONFIG_BOOKE go? BookE doesn't need this; the
> interrupt will continue asserting until software clears TSR[DIS].
Ooops, I didnt notice Anton was removing it. Please send me a followup
patch to make decrementer_check_overflow() an empty inline on BookE.
Cheers,
Ben.
^ permalink raw reply
* Re: sam460ex, sm501 incorrect device id with kernel >=linux-2.6.39
From: acrux @ 2011-11-28 19:56 UTC (permalink / raw)
To: Josh Boyer; +Cc: linuxppc-dev
In-Reply-To: <CA+5PVA592G1RVdj_C+NMFQ8nHx=0-eaF9Hn3NZ8VabpCTQGi1Q@mail.gmail.com>
On Mon, 28 Nov 2011 07:12:38 -0500
Josh Boyer <jwboyer@gmail.com> wrote:
> On Sun, Nov 27, 2011 at 11:37 AM, acrux <acrux_it@libero.it> wrote:
> >
> > Acube Sam460ex has SM502 as onboard video.
> > I got this with any kernel newer than 2.6.38.x thus the framebuffer
> > is lost too:
> >
> > root@sam4x0:~# diff dmesg-2.6.38.8 dmesg-2.6.39.4
> > 1,2c1,3
> > < Using PowerPC 44x Platform machine description
> > < Linux version 2.6.38.8-Sam460ex (root@sam4x0) (gcc version 4.5.3
> > (CRUX PPC) ) #1 Fri Nov 11 22:07:53 CET 2011
> > ---
> >> Using Canyonlands machine description
> >> Initializing cgroup subsys cpu
>
> You seem to have switched from using the generic PowerPC 44x platform,
> to using a Canyonlands kernel and/or DTB. Not sure why that is, but
> it's probably not helping your issues at all.
>
i think it was only a cosmetic change as it was always used
Canyonlands platform and his own proper dtb.
> >> Linux version 2.6.39.4-Sam460ex (root@sam4x0) (gcc version 4.5.3
> >> (CRUX PPC) ) #1 Fri Nov 11 19:06:02 CET 2011
> > 17c18
> > [cut]
> > 161,179c165,167
> > < sm501 0001:00:06.0: SM501 At f5480000: Version 050100c0, 64 Mb,
> > IRQ 19
>
> > ---
> >> sm501 0001:00:06.0: incorrect device id c0000105
>
> Something is reading the device ID in the wrong endian (and probably
> everything else).
>
it seems to be an endianess issue but i didn't find when it was
introduced. Really strange this kind of issue was never noticed
bumping from 2.6.38.x to 2.6.39.x .
--nico
--
GNU/Linux on Power Architecture
CRUX PPC - http://cruxppc.org/
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Josh Boyer @ 2011-11-28 19:46 UTC (permalink / raw)
To: Scott Wood; +Cc: paulus, linuxppc-dev, Anton Blanchard
In-Reply-To: <4ED3E168.5000002@freescale.com>
On Mon, Nov 28, 2011 at 2:30 PM, Scott Wood <scottwood@freescale.com> wrote:
> On 11/28/2011 10:23 AM, Josh Boyer wrote:
>> On Mon, Nov 28, 2011 at 11:04 AM, Kumar Gala <galak@kernel.crashing.org> wrote:
>>>
>>> Since you're fixing this can you add the following for CONFIG_BOOKE:
>>>
>>> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
>>
>> Those don't exist on 4xx, so CONFIG_BOOKE doesn't seem appropriate.
>
> They're defined by book3e of ISA 2.06.
4xx existed before that, sadly (as did CONFIG_BOOKE).
> Not all bits are going to exist on all CPUs -- does 4xx use these bits
> to mean something different?
No, marked as reserved. However, given the patch shows up in human
readable output, I don't think we want reserved bits being decoded and
showing up inadvertently.
Could introduce BOOK3E_32 to cover cases like this.
josh
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Scott Wood @ 2011-11-28 19:30 UTC (permalink / raw)
To: Josh Boyer; +Cc: paulus, linuxppc-dev, Anton Blanchard
In-Reply-To: <CA+5PVA4kkeuWqdKWAJOJSUue=XsEC=27T2zptb-1P_H+HwNymg@mail.gmail.com>
On 11/28/2011 10:23 AM, Josh Boyer wrote:
> On Mon, Nov 28, 2011 at 11:04 AM, Kumar Gala <galak@kernel.crashing.org> wrote:
>>
>> Since you're fixing this can you add the following for CONFIG_BOOKE:
>>
>> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
>
> Those don't exist on 4xx, so CONFIG_BOOKE doesn't seem appropriate.
They're defined by book3e of ISA 2.06.
Not all bits are going to exist on all CPUs -- does 4xx use these bits
to mean something different?
-Scott
^ permalink raw reply
* Re: [PATCH 1/6] powerpc/time: Handle wrapping of decrementer
From: Scott Wood @ 2011-11-28 17:44 UTC (permalink / raw)
To: Anton Blanchard; +Cc: paulus, linuxppc-dev, miltonm, johnstul
In-Reply-To: <20111124060847.105131188@samba.org>
On 11/24/2011 12:07 AM, Anton Blanchard wrote:
> Index: linux-build/arch/powerpc/kernel/irq.c
> ===================================================================
> --- linux-build.orig/arch/powerpc/kernel/irq.c 2011-11-17 10:04:16.551137554 +1100
> +++ linux-build/arch/powerpc/kernel/irq.c 2011-11-17 14:23:10.834514143 +1100
> @@ -164,16 +164,13 @@ notrace void arch_local_irq_restore(unsi
> */
> local_paca->hard_enabled = en;
>
> -#ifndef CONFIG_BOOKE
> - /* On server, re-trigger the decrementer if it went negative since
> - * some processors only trigger on edge transitions of the sign bit.
> - *
> - * BookE has a level sensitive decrementer (latches in TSR) so we
> - * don't need that
> + /*
> + * Trigger the decrementer if we have a pending event. Some processors
> + * only trigger on edge transitions of the sign bit. We might also
> + * have disabled interrupts long enough that the decrementer wrapped
> + * to positive.
> */
> - if ((int)mfspr(SPRN_DEC) < 0)
> - mtspr(SPRN_DEC, 1);
> -#endif /* CONFIG_BOOKE */
> + decrementer_check_overflow();
Where did the #ifndef CONFIG_BOOKE go? BookE doesn't need this; the
interrupt will continue asserting until software clears TSR[DIS].
-Scott
^ permalink raw reply
* Re: [PATCH] powerpc/85xx: do not force PHYS_64BIT on the P1022DS
From: Timur Tabi @ 2011-11-28 17:41 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev
In-Reply-To: <C0BC3E1D-5FCF-42EC-A030-4F86EC1D76F3@freescale.com>
Kumar Gala wrote:
> If you want me to apply this please also provided a 32-bit .dts for
> p1022ds. This should be pretty trivial based on my recent .dts
> cleanups.
I think I found another bug in the 36-bit DTS. Looking at U-Boot, I see this:
#ifdef CONFIG_PHYS_64BIT
#define CONFIG_SYS_PCIE2_MEM_BUS 0xe0000000
#define CONFIG_SYS_PCIE2_MEM_PHYS 0xc20000000ull
#else
#define CONFIG_SYS_PCIE2_MEM_BUS 0xa0000000
#define CONFIG_SYS_PCIE2_MEM_PHYS 0xa0000000
#endif
But the 36-bit DTS has this:
pci0: pcie@ffe09000 {
reg = <0x0 0xffe09000 0 0x1000>;
ranges = <0x2000000 0x0 0xa0000000 0xc 0x20000000 0x0 0x20000000
0x1000000 0x0 0x00000000 0xf 0xffc10000 0x0 0x10000>;
I don't think these match. I think the first 'ranges' line should have 0xe0000000 instead of 0xa0000000.
I see the same problem with the other two PCI busses. It looks like the physical address is correct, but the BUS address is wrong (it's using the 32-bit bus address instead of the 36-bit bus address).
--
Timur Tabi
Linux kernel developer at Freescale
^ permalink raw reply
* Re: [PATCH 3/3] mtd/nand : workaround for Freescale FCM to support large-page Nand chip
From: Scott Wood @ 2011-11-28 17:20 UTC (permalink / raw)
To: Li Yang-R58472
Cc: Wood Scott-B07421, Artem.Bityutskiy@nokia.com,
linuxppc-dev@lists.ozlabs.org, Liu Shuo-B35362,
linux-kernel@vger.kernel.org, linux-mtd@lists.infradead.org,
akpm@linux-foundation.org, dwmw2@infradead.org
In-Reply-To: <3F607A5180246847A760FD34122A1E052DC4CD@039-SN1MPN1-003.039d.mgd.msft.net>
On 11/24/2011 01:37 AM, Li Yang-R58472 wrote:
>> +static void io_to_buffer(struct mtd_info *mtd, int subpage, int oob)
>> +{
>> + struct nand_chip *chip = mtd->priv;
>> + struct fsl_elbc_mtd *priv = chip->priv;
>> + struct fsl_elbc_fcm_ctrl *elbc_fcm_ctrl = priv->ctrl->nand;
>> + void *src, *dst;
>> + int len = (oob ? 64 : 2048);
>> +
>> + if (oob)
>> + dst = elbc_fcm_ctrl->buffer + mtd->writesize + subpage * 64;
>> + else
>> + dst = elbc_fcm_ctrl->buffer + subpage * 2048;
>> +
>> + src = elbc_fcm_ctrl->addr + (oob ? 2048 : 0);
>> + memcpy_fromio(dst, src, len);
>
> Might be safer to use _memcpy_fromio()
How so?
memcpy_fromio() is the public interface that will end up calling
_memcpy_fromio() on powerpc.
-Scott
^ permalink raw reply
* Re: [PATCH 03/13] powerpc: Fix booke hugetlb preload code for PPC_MM_SLICES and 64-bit
From: Becky Bruce @ 2011-11-28 16:54 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, david
In-Reply-To: <1322181832.32635.14.camel@pasglop>
On Nov 24, 2011, at 6:43 PM, Benjamin Herrenschmidt wrote:
> On Mon, 2011-10-10 at 15:50 -0500, Becky Bruce wrote:
>=20
> .../...
>=20
>> #ifdef CONFIG_PPC_MM_SLICES
>> - psize =3D mmu_get_tsize(get_slice_psize(mm, ea));
>> - tsize =3D mmu_get_psize(psize);
>> + psize =3D get_slice_psize(mm, ea);
>> + tsize =3D mmu_get_tsize(psize);
>> shift =3D mmu_psize_defs[psize].shift;
>> #else
>> - vma =3D find_vma(mm, ea);
>> - psize =3D vma_mmu_pagesize(vma); /* returns actual size =
in bytes */
>> - asm (PPC_CNTLZL "%0,%1" : "=3Dr" (lz) : "r" (psize));
>> - shift =3D 31 - lz;
>> - tsize =3D 21 - lz;
>> + psize =3D vma_mmu_pagesize(find_vma(mm, ea));
>> + shift =3D __ilog2(psize);
>> + tsize =3D shift - 10;
>> #endif
>=20
> Now, I know it was already there and you are just moving it around in
> this patch but come on ... find_vma() here ? Really ? And with no =
result
> checking nor boundary checking (remember it can return a vma that
> doesn't enclose the address etc....). Now I know in this specific case
> it -should- be safe but still...
>=20
> Now, the caller is just doing:
>=20
> book3e_hugetlb_preload(vma->vm_mm, address, *ptep);
>=20
> So why not just change the prototype and pass the vma down instead ?
There's no reason - I just left the prototype the way it was in the =
original code, but it makes sense to change it given the changes to the =
function. Respin coming.....
-B
^ permalink raw reply
* Re: [PATCH][RFC] fsldma: fix performance degradation by optimizing spinlock use.
From: Ira W. Snyder @ 2011-11-28 16:38 UTC (permalink / raw)
To: Shi Xuelin-B29237
Cc: vinod.koul@intel.com, dan.j.williams@intel.com,
linuxppc-dev@lists.ozlabs.org, Li Yang-R58472,
linux-kernel@vger.kernel.org
In-Reply-To: <DBB740589CE8814680DECFE34BE197AB148CDD@039-SN1MPN1-006.039d.mgd.msft.net>
On Thu, Nov 24, 2011 at 08:12:25AM +0000, Shi Xuelin-B29237 wrote:
> Hi Ira,
>
> Thanks for your review.
>
> After second thought, I think your scenario may not occur.
> Because the cookie 20 we query must be returned by fsl_dma_tx_submit(...) in practice.
> We never query a cookie not returned by fsl_dma_tx_submit(...).
>
I agree about this part.
> When we call fsl_tx_status(20), the chan->common.cookie is definitely wrote as 20 and cpu2 could not read as 19.
>
This is what I don't agree about. However, I'm not an expert on CPU
cache vs. memory accesses in an multi-processor system. The section
titled "CACHE COHERENCY" in Documentation/memory-barriers.txt leads me
to believe that the scenario I described is possible.
What happens if CPU1's write of chan->common.cookie only goes into
CPU1's cache. It never makes it to main memory before CPU2 fetches the
old value of 19.
I don't think you should see any performance impact from the smp_mb()
operation.
Thanks,
Ira
> -----Original Message-----
> From: Ira W. Snyder [mailto:iws@ovro.caltech.edu]
> Sent: 2011年11月23日 2:59
> To: Shi Xuelin-B29237
> Cc: dan.j.williams@intel.com; Li Yang-R58472; zw@zh-kernel.org; vinod.koul@intel.com; linuxppc-dev@lists.ozlabs.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCH][RFC] fsldma: fix performance degradation by optimizing spinlock use.
>
> On Tue, Nov 22, 2011 at 12:55:05PM +0800, b29237@freescale.com wrote:
> > From: Forrest Shi <b29237@freescale.com>
> >
> > dma status check function fsl_tx_status is heavily called in
> > a tight loop and the desc lock in fsl_tx_status contended by
> > the dma status update function. this caused the dma performance
> > degrades much.
> >
> > this patch releases the lock in the fsl_tx_status function.
> > I believe it has no neglect impact on the following call of
> > dma_async_is_complete(...).
> >
> > we can see below three conditions will be identified as success
> > a) x < complete < use
> > b) x < complete+N < use+N
> > c) x < complete < use+N
> > here complete is the completed_cookie, use is the last_used
> > cookie, x is the querying cookie, N is MAX cookie
> >
> > when chan->completed_cookie is being read, the last_used may
> > be incresed. Anyway it has no neglect impact on the dma status
> > decision.
> >
> > Signed-off-by: Forrest Shi <xuelin.shi@freescale.com>
> > ---
> > drivers/dma/fsldma.c | 5 -----
> > 1 files changed, 0 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/dma/fsldma.c b/drivers/dma/fsldma.c index
> > 8a78154..1dca56f 100644
> > --- a/drivers/dma/fsldma.c
> > +++ b/drivers/dma/fsldma.c
> > @@ -986,15 +986,10 @@ static enum dma_status fsl_tx_status(struct dma_chan *dchan,
> > struct fsldma_chan *chan = to_fsl_chan(dchan);
> > dma_cookie_t last_complete;
> > dma_cookie_t last_used;
> > - unsigned long flags;
> > -
> > - spin_lock_irqsave(&chan->desc_lock, flags);
> >
>
> This will cause a bug. See below for a detailed explanation. You need this instead:
>
> /*
> * On an SMP system, we must ensure that this CPU has seen the
> * memory accesses performed by another CPU under the
> * chan->desc_lock spinlock.
> */
> smp_mb();
> > last_complete = chan->completed_cookie;
> > last_used = dchan->cookie;
> >
> > - spin_unlock_irqrestore(&chan->desc_lock, flags);
> > -
> > dma_set_tx_state(txstate, last_complete, last_used, 0);
> > return dma_async_is_complete(cookie, last_complete, last_used); }
>
> Facts:
> - dchan->cookie is the same member as chan->common.cookie (same memory location)
> - chan->common.cookie is the "last allocated cookie for a pending transaction"
> - chan->completed_cookie is the "last completed transaction"
>
> I have replaced "dchan->cookie" with "chan->common.cookie" in the below explanation, to keep everything referenced from the same structure.
>
> Variable usage before your change. Everything is used locked.
> - RW chan->common.cookie (fsl_dma_tx_submit)
> - R chan->common.cookie (fsl_tx_status)
> - R chan->completed_cookie (fsl_tx_status)
> - W chan->completed_cookie (dma_do_tasklet)
>
> Variable usage after your change:
> - RW chan->common.cookie LOCKED
> - R chan->common.cookie NO LOCK
> - R chan->completed_cookie NO LOCK
> - W chan->completed_cookie LOCKED
>
> What if we assume that you have a 2 CPU system (such as a P2020). After your changes, one possible sequence is:
>
> === CPU1 - allocate + submit descriptor: fsl_dma_tx_submit() === spin_lock_irqsave
> descriptor->cookie = 20 (x in your example)
> chan->common.cookie = 20 (used in your example)
> spin_unlock_irqrestore
>
> === CPU2 - immediately calls fsl_tx_status() ===
> chan->common.cookie == 19
> chan->completed_cookie == 19
> descriptor->cookie == 20
>
> Since we don't have locks anymore, CPU2 may not have seen the write to
> chan->common.cookie yet.
>
> Also assume that the DMA hardware has not started processing the transaction yet. Therefore dma_do_tasklet() has not been called, and
> chan->completed_cookie has not been updated.
>
> In this case, dma_async_is_complete() (on CPU2) returns DMA_SUCCESS, even though the DMA operation has not succeeded. The DMA operation has not even started yet!
>
> The smp_mb() fixes this, since it forces CPU2 to have seen all memory operations that happened before CPU1 released the spinlock. Spinlocks are implicit SMP memory barriers.
>
> Therefore, the above example becomes:
> smp_mb();
> chan->common.cookie == 20
> chan->completed_cookie == 19
> descriptor->cookie == 20
>
> Then dma_async_is_complete() returns DMA_IN_PROGRESS, which is correct.
>
> Thanks,
> Ira
>
>
> _______________________________________________
> Linuxppc-dev mailing list
> Linuxppc-dev@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/linuxppc-dev
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Josh Boyer @ 2011-11-28 16:23 UTC (permalink / raw)
To: Kumar Gala; +Cc: linuxppc-dev, paulus, Anton Blanchard
In-Reply-To: <F744714B-0527-415C-92BE-A5CB678F1C29@kernel.crashing.org>
On Mon, Nov 28, 2011 at 11:04 AM, Kumar Gala <galak@kernel.crashing.org> wr=
ote:
>
> On Nov 24, 2011, at 11:35 PM, Anton Blanchard wrote:
>
>>
>> On a 64bit book3s machine I have an oops from a system reset that
>> claims the book3e CE bit was set:
>>
>> MSR: 8000000000021032 <ME,CE,IR,DR> =A0CR: 24004082 =A0XER: 00000010
>>
>> On a book3s machine system reset sets IBM bit 46 and 47 depending on
>> the power saving mode. Separate the definitions by type and for
>> completeness add the rest of the bits in.
>>
>> Signed-off-by: Anton Blanchard <anton@samba.org>
>> ---
>>
>> Index: linux-build/arch/powerpc/kernel/process.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-build.orig/arch/powerpc/kernel/process.c =A0 =A02011-11-25 13:=
22:24.294919094 +1100
>> +++ linux-build/arch/powerpc/kernel/process.c 2011-11-25 13:36:23.213834=
524 +1100
>> @@ -584,16 +584,32 @@ static struct regbit {
>> =A0 =A0 =A0 unsigned long bit;
>> =A0 =A0 =A0 const char *name;
>> } msr_bits[] =3D {
>> +#if defined(CONFIG_PPC64) && !defined(CONFIG_BOOKE)
>> + =A0 =A0 {MSR_SF, =A0 =A0 =A0 =A0"SF"},
>> + =A0 =A0 {MSR_HV, =A0 =A0 =A0 =A0"HV"},
>> +#endif
>> + =A0 =A0 {MSR_VEC, =A0 =A0 =A0 "VEC"},
>> + =A0 =A0 {MSR_VSX, =A0 =A0 =A0 "VSX"},
>> +#ifdef CONFIG_BOOKE
>> + =A0 =A0 {MSR_CE, =A0 =A0 =A0 =A0"CE"},
>> +#endif
>> =A0 =A0 =A0 {MSR_EE, =A0 =A0 =A0 =A0"EE"},
>> =A0 =A0 =A0 {MSR_PR, =A0 =A0 =A0 =A0"PR"},
>> =A0 =A0 =A0 {MSR_FP, =A0 =A0 =A0 =A0"FP"},
>> - =A0 =A0 {MSR_VEC, =A0 =A0 =A0 "VEC"},
>> - =A0 =A0 {MSR_VSX, =A0 =A0 =A0 "VSX"},
>> =A0 =A0 =A0 {MSR_ME, =A0 =A0 =A0 =A0"ME"},
>> - =A0 =A0 {MSR_CE, =A0 =A0 =A0 =A0"CE"},
>> +#ifdef CONFIG_BOOKE
>> =A0 =A0 =A0 {MSR_DE, =A0 =A0 =A0 =A0"DE"},
>> +#else
>> + =A0 =A0 {MSR_SE, =A0 =A0 =A0 =A0"SE"},
>> + =A0 =A0 {MSR_BE, =A0 =A0 =A0 =A0"BE"},
>> +#endif
>> =A0 =A0 =A0 {MSR_IR, =A0 =A0 =A0 =A0"IR"},
>> =A0 =A0 =A0 {MSR_DR, =A0 =A0 =A0 =A0"DR"},
>> + =A0 =A0 {MSR_PMM, =A0 =A0 =A0 "PMM"},
>> +#ifndef CONFIG_BOOKE
>> + =A0 =A0 {MSR_RI, =A0 =A0 =A0 =A0"RI"},
>
> We have 'RI' on some BOOKE so lets allow for it to be decoded
>
>> + =A0 =A0 {MSR_LE, =A0 =A0 =A0 =A0"LE"},
>> +#endif
>> =A0 =A0 =A0 {0, =A0 =A0 =A0 =A0 =A0 =A0 NULL}
>> };
>
> Since you're fixing this can you add the following for CONFIG_BOOKE:
>
> MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
Those don't exist on 4xx, so CONFIG_BOOKE doesn't seem appropriate.
josh
^ permalink raw reply
* Re: [PATCH] powerpc: Decode correct MSR bits in oops output
From: Kumar Gala @ 2011-11-28 16:04 UTC (permalink / raw)
To: Anton Blanchard; +Cc: paulus, linuxppc-dev
In-Reply-To: <20111125163557.5a464006@kryten>
On Nov 24, 2011, at 11:35 PM, Anton Blanchard wrote:
>=20
> On a 64bit book3s machine I have an oops from a system reset that
> claims the book3e CE bit was set:
>=20
> MSR: 8000000000021032 <ME,CE,IR,DR> CR: 24004082 XER: 00000010
>=20
> On a book3s machine system reset sets IBM bit 46 and 47 depending on
> the power saving mode. Separate the definitions by type and for
> completeness add the rest of the bits in.
>=20
> Signed-off-by: Anton Blanchard <anton@samba.org>
> ---
>=20
> Index: linux-build/arch/powerpc/kernel/process.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-build.orig/arch/powerpc/kernel/process.c 2011-11-25 =
13:22:24.294919094 +1100
> +++ linux-build/arch/powerpc/kernel/process.c 2011-11-25 =
13:36:23.213834524 +1100
> @@ -584,16 +584,32 @@ static struct regbit {
> unsigned long bit;
> const char *name;
> } msr_bits[] =3D {
> +#if defined(CONFIG_PPC64) && !defined(CONFIG_BOOKE)
> + {MSR_SF, "SF"},
> + {MSR_HV, "HV"},
> +#endif
> + {MSR_VEC, "VEC"},
> + {MSR_VSX, "VSX"},
> +#ifdef CONFIG_BOOKE
> + {MSR_CE, "CE"},
> +#endif
> {MSR_EE, "EE"},
> {MSR_PR, "PR"},
> {MSR_FP, "FP"},
> - {MSR_VEC, "VEC"},
> - {MSR_VSX, "VSX"},
> {MSR_ME, "ME"},
> - {MSR_CE, "CE"},
> +#ifdef CONFIG_BOOKE
> {MSR_DE, "DE"},
> +#else
> + {MSR_SE, "SE"},
> + {MSR_BE, "BE"},
> +#endif
> {MSR_IR, "IR"},
> {MSR_DR, "DR"},
> + {MSR_PMM, "PMM"},
> +#ifndef CONFIG_BOOKE
> + {MSR_RI, "RI"},
We have 'RI' on some BOOKE so lets allow for it to be decoded
> + {MSR_LE, "LE"},
> +#endif
> {0, NULL}
> };
Since you're fixing this can you add the following for CONFIG_BOOKE:
MSR_GS, MSR_UCLE, MSR_PMM, MSR_CM
- k=
^ permalink raw reply
* Re: [PATCH 03/13] powerpc: Fix booke hugetlb preload code for PPC_MM_SLICES and 64-bit
From: Kumar Gala @ 2011-11-28 16:01 UTC (permalink / raw)
To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, david
In-Reply-To: <1322181832.32635.14.camel@pasglop>
On Nov 24, 2011, at 6:43 PM, Benjamin Herrenschmidt wrote:
> On Mon, 2011-10-10 at 15:50 -0500, Becky Bruce wrote:
>=20
> .../...
>=20
>> #ifdef CONFIG_PPC_MM_SLICES
>> - psize =3D mmu_get_tsize(get_slice_psize(mm, ea));
>> - tsize =3D mmu_get_psize(psize);
>> + psize =3D get_slice_psize(mm, ea);
>> + tsize =3D mmu_get_tsize(psize);
>> shift =3D mmu_psize_defs[psize].shift;
>> #else
>> - vma =3D find_vma(mm, ea);
>> - psize =3D vma_mmu_pagesize(vma); /* returns actual size =
in bytes */
>> - asm (PPC_CNTLZL "%0,%1" : "=3Dr" (lz) : "r" (psize));
>> - shift =3D 31 - lz;
>> - tsize =3D 21 - lz;
>> + psize =3D vma_mmu_pagesize(find_vma(mm, ea));
>> + shift =3D __ilog2(psize);
>> + tsize =3D shift - 10;
>> #endif
>=20
> Now, I know it was already there and you are just moving it around in
> this patch but come on ... find_vma() here ? Really ? And with no =
result
> checking nor boundary checking (remember it can return a vma that
> doesn't enclose the address etc....). Now I know in this specific case
> it -should- be safe but still...
>=20
> Now, the caller is just doing:
>=20
> book3e_hugetlb_preload(vma->vm_mm, address, *ptep);
>=20
> So why not just change the prototype and pass the vma down instead ?
Can we do this on top of the patchset instead of changing the existing =
patchset?
- k=
^ permalink raw reply
* Re: [PATCH net-next v3 3/4] can: cc770: add platform bus driver for the CC770 and AN82527
From: Marc Kleine-Budde @ 2011-11-28 12:33 UTC (permalink / raw)
To: Wolfgang Grandegger
Cc: Stanislav Yelenskiy, netdev, Devicetree-discuss, linux-can,
linuxppc-dev, IreneV, socketcan-users, Wolfgang Zarre
In-Reply-To: <1322479858-4874-4-git-send-email-wg@grandegger.com>
[-- Attachment #1: Type: text/plain, Size: 13373 bytes --]
On 11/28/2011 12:30 PM, Wolfgang Grandegger wrote:
> This driver works with both, static platform data and device tree
> bindings. It has been tested on a TQM855L board with two AN82527
> CAN controllers on the local bus.
>
> CC: Devicetree-discuss@lists.ozlabs.org
> CC: linuxppc-dev@ozlabs.org
> CC: Kumar Gala <galak@kernel.crashing.org>
> Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
See comment in the _remove function. Otherwise good. Add my:
Acked-by: Marc Kleine-Budde <mkl@pengutronix.de>
> ---
> .../devicetree/bindings/net/can/cc770.txt | 56 ++++
> drivers/net/can/cc770/Kconfig | 7 +
> drivers/net/can/cc770/Makefile | 1 +
> drivers/net/can/cc770/cc770_platform.c | 280 ++++++++++++++++++++
> 4 files changed, 344 insertions(+), 0 deletions(-)
> create mode 100644 Documentation/devicetree/bindings/net/can/cc770.txt
> create mode 100644 drivers/net/can/cc770/cc770_platform.c
>
> diff --git a/Documentation/devicetree/bindings/net/can/cc770.txt b/Documentation/devicetree/bindings/net/can/cc770.txt
> new file mode 100644
> index 0000000..01e282d
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/net/can/cc770.txt
> @@ -0,0 +1,56 @@
> +Memory mapped Bosch CC770 and Intel AN82527 CAN controller
> +
> +Note: The CC770 is a CAN controller from Bosch, which is 100%
> +compatible with the old AN82527 from Intel, but with "bugs" being fixed.
> +
> +Required properties:
> +
> +- compatible : should be "bosch,cc770" for the CC770 and "intc,82527"
> + for the AN82527.
> +
> +- reg : should specify the chip select, address offset and size required
> + to map the registers of the controller. The size is usually 0x80.
> +
> +- interrupts : property with a value describing the interrupt source
> + (number and sensitivity) required for the controller.
> +
> +Optional properties:
> +
> +- bosch,external-clock-frequency : frequency of the external oscillator
> + clock in Hz. Note that the internal clock frequency used by the
> + controller is half of that value. If not specified, a default
> + value of 16000000 (16 MHz) is used.
> +
> +- bosch,clock-out-frequency : slock frequency in Hz on the CLKOUT pin.
> + If not specified or if the specified value is 0, the CLKOUT pin
> + will be disabled.
> +
> +- bosch,slew-rate : slew rate of the CLKOUT signal. If not specified,
> + a resonable value will be calculated.
> +
> +- bosch,disconnect-rx0-input : see data sheet.
> +
> +- bosch,disconnect-rx1-input : see data sheet.
> +
> +- bosch,disconnect-tx1-output : see data sheet.
> +
> +- bosch,polarity-dominant : see data sheet.
> +
> +- bosch,divide-memory-clock : see data sheet.
> +
> +- bosch,iso-low-speed-mux : see data sheet.
> +
> +For further information, please have a look to the CC770 or AN82527.
> +
> +Examples:
> +
> +can@3,100 {
> + compatible = "bosch,cc770";
> + reg = <3 0x100 0x80>;
> + interrupts = <2 0>;
> + interrupt-parent = <&mpic>;
> + bosch,external-clock-frequency = <16000000>;
> +};
> +
> +
> +
> diff --git a/drivers/net/can/cc770/Kconfig b/drivers/net/can/cc770/Kconfig
> index 28e4d48..22c07a8 100644
> --- a/drivers/net/can/cc770/Kconfig
> +++ b/drivers/net/can/cc770/Kconfig
> @@ -11,4 +11,11 @@ config CAN_CC770_ISA
> connected to the ISA bus using I/O port, memory mapped or
> indirect access.
>
> +config CAN_CC770_PLATFORM
> + tristate "Generic Platform Bus based CC770 driver"
> + ---help---
> + This driver adds support for the CC770 and AN82527 chips
> + connected to the "platform bus" (Linux abstraction for directly
> + to the processor attached devices).
> +
> endif
> diff --git a/drivers/net/can/cc770/Makefile b/drivers/net/can/cc770/Makefile
> index 872ecff..9fb8321 100644
> --- a/drivers/net/can/cc770/Makefile
> +++ b/drivers/net/can/cc770/Makefile
> @@ -4,5 +4,6 @@
>
> obj-$(CONFIG_CAN_CC770) += cc770.o
> obj-$(CONFIG_CAN_CC770_ISA) += cc770_isa.o
> +obj-$(CONFIG_CAN_CC770_PLATFORM) += cc770_platform.o
>
> ccflags-$(CONFIG_CAN_DEBUG_DEVICES) := -DDEBUG
> diff --git a/drivers/net/can/cc770/cc770_platform.c b/drivers/net/can/cc770/cc770_platform.c
> new file mode 100644
> index 0000000..65e177e
> --- /dev/null
> +++ b/drivers/net/can/cc770/cc770_platform.c
> @@ -0,0 +1,280 @@
> +/*
> + * Driver for CC770 and AN82527 CAN controllers on the platform bus
> + *
> + * Copyright (C) 2009, 2011 Wolfgang Grandegger <wg@grandegger.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the version 2 of the GNU General Public License
> + * as published by the Free Software Foundation
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software Foundation,
> + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
please remove the address.
> + */
> +
> +/*
> + * If platform data are used you should have similar definitions
> + * in your board-specific code:
> + *
> + * static struct cc770_platform_data myboard_cc770_pdata = {
> + * .osc_freq = 16000000,
> + * .cir = 0x41,
> + * .cor = 0x20,
> + * .bcr = 0x40,
> + * };
> + *
> + * Please see include/linux/can/platform/cc770.h for description of
> + * above fields.
> + *
> + * If the device tree is used, you need a CAN node definition in your
> + * DTS file similar to:
> + *
> + * can@3,100 {
> + * compatible = "bosch,cc770";
> + * reg = <3 0x100 0x80>;
> + * interrupts = <2 0>;
> + * interrupt-parent = <&mpic>;
> + * bosch,external-clock-frequency = <16000000>;
> + * };
> + *
> + * See "Documentation/devicetree/bindings/net/can/cc770.txt" for further
> + * information.
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/interrupt.h>
> +#include <linux/netdevice.h>
> +#include <linux/delay.h>
> +#include <linux/can.h>
> +#include <linux/can/dev.h>
> +#include <linux/can/platform/cc770.h>
> +
> +#include <linux/of_platform.h>
> +
> +#include "cc770.h"
> +
> +#define DRV_NAME "cc770_platform"
> +
> +MODULE_AUTHOR("Wolfgang Grandegger <wg@grandegger.com>");
> +MODULE_DESCRIPTION("Socket-CAN driver for CC770 on the platform bus");
> +MODULE_LICENSE("GPL v2");
> +
> +#define CC770_PLATFORM_CAN_CLOCK 16000000
> +
> +static u8 cc770_platform_read_reg(const struct cc770_priv *priv, int reg)
> +{
> + return in_8(priv->reg_base + reg);
> +}
> +
> +static void cc770_platform_write_reg(const struct cc770_priv *priv, int reg,
> + u8 val)
> +{
> + out_8(priv->reg_base + reg, val);
> +}
> +
> +static int __devinit cc770_get_of_node_data(struct platform_device *pdev,
> + struct cc770_priv *priv)
> +{
> + struct device_node *np = pdev->dev.of_node;
> + const u32 *prop;
> + int prop_size;
> + u32 clkext;
> +
> + prop = of_get_property(np, "bosch,external-clock-frequency",
> + &prop_size);
> + if (prop && (prop_size == sizeof(u32)))
> + clkext = *prop;
> + else
> + clkext = CC770_PLATFORM_CAN_CLOCK; /* default */
> + priv->can.clock.freq = clkext;
> +
> + /* The system clock may not exceed 10 MHz */
> + if (priv->can.clock.freq > 10000000) {
> + priv->cpu_interface |= CPUIF_DSC;
> + priv->can.clock.freq /= 2;
> + }
> +
> + /* The memory clock may not exceed 8 MHz */
> + if (priv->can.clock.freq > 8000000)
> + priv->cpu_interface |= CPUIF_DMC;
> +
> + if (of_get_property(np, "bosch,divide-memory-clock", NULL))
> + priv->cpu_interface |= CPUIF_DMC;
> + if (of_get_property(np, "bosch,iso-low-speed-mux", NULL))
> + priv->cpu_interface |= CPUIF_MUX;
> +
> + if (!of_get_property(np, "bosch,no-comperator-bypass", NULL))
> + priv->bus_config |= BUSCFG_CBY;
> + if (of_get_property(np, "bosch,disconnect-rx0-input", NULL))
> + priv->bus_config |= BUSCFG_DR0;
> + if (of_get_property(np, "bosch,disconnect-rx1-input", NULL))
> + priv->bus_config |= BUSCFG_DR1;
> + if (of_get_property(np, "bosch,disconnect-tx1-output", NULL))
> + priv->bus_config |= BUSCFG_DT1;
> + if (of_get_property(np, "bosch,polarity-dominant", NULL))
> + priv->bus_config |= BUSCFG_POL;
> +
> + prop = of_get_property(np, "bosch,clock-out-frequency", &prop_size);
> + if (prop && (prop_size == sizeof(u32)) && *prop > 0) {
> + u32 cdv = clkext / *prop;
> + int slew;
> +
> + if (cdv > 0 && cdv < 16) {
> + priv->cpu_interface |= CPUIF_CEN;
> + priv->clkout |= (cdv - 1) & CLKOUT_CD_MASK;
> +
> + prop = of_get_property(np, "bosch,slew-rate",
> + &prop_size);
> + if (prop && (prop_size == sizeof(u32))) {
> + slew = *prop;
> + } else {
> + /* Determine default slew rate */
> + slew = (CLKOUT_SL_MASK >>
> + CLKOUT_SL_SHIFT) -
> + ((cdv * clkext - 1) / 8000000);
> + if (slew < 0)
> + slew = 0;
> + }
> + priv->clkout |= (slew << CLKOUT_SL_SHIFT) &
> + CLKOUT_SL_MASK;
> + } else {
> + dev_dbg(&pdev->dev, "invalid clock-out-frequency\n");
> + }
> + }
> +
> + return 0;
> +}
> +
> +static int __devinit cc770_get_platform_data(struct platform_device *pdev,
> + struct cc770_priv *priv)
> +{
> +
> + struct cc770_platform_data *pdata = pdev->dev.platform_data;
> +
> + priv->can.clock.freq = pdata->osc_freq;
> + if (priv->cpu_interface | CPUIF_DSC)
> + priv->can.clock.freq /= 2;
> + priv->clkout = pdata->cor;
> + priv->bus_config = pdata->bcr;
> + priv->cpu_interface = pdata->cir;
> +
> + return 0;
> +}
> +
> +static int __devinit cc770_platform_probe(struct platform_device *pdev)
> +{
> + struct net_device *dev;
> + struct cc770_priv *priv;
> + struct resource *mem;
> + resource_size_t mem_size;
> + void __iomem *base;
> + int err, irq;
> +
> + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> + irq = platform_get_irq(pdev, 0);
> + if (!mem || irq <= 0)
> + return -ENODEV;
> +
> + mem_size = resource_size(mem);
> + if (!request_mem_region(mem->start, mem_size, pdev->name))
> + return -EBUSY;
> +
> + base = ioremap(mem->start, mem_size);
> + if (!base) {
> + err = -ENOMEM;
> + goto exit_release_mem;
> + }
> +
> + dev = alloc_cc770dev(0);
> + if (!dev) {
> + err = -ENOMEM;
> + goto exit_unmap_mem;
> + }
> +
> + dev->irq = irq;
> + priv = netdev_priv(dev);
> + priv->read_reg = cc770_platform_read_reg;
> + priv->write_reg = cc770_platform_write_reg;
> + priv->irq_flags = IRQF_SHARED;
> + priv->reg_base = base;
> +
> + if (pdev->dev.of_node)
> + err = cc770_get_of_node_data(pdev, priv);
> + else if (pdev->dev.platform_data)
> + err = cc770_get_platform_data(pdev, priv);
> + else
> + err = -ENODEV;
> + if (err)
> + goto exit_free_cc770;
> +
> + dev_dbg(&pdev->dev,
> + "reg_base=0x%p irq=%d clock=%d cpu_interface=0x%02x "
> + "bus_config=0x%02x clkout=0x%02x\n",
> + priv->reg_base, dev->irq, priv->can.clock.freq,
> + priv->cpu_interface, priv->bus_config, priv->clkout);
> +
> + dev_set_drvdata(&pdev->dev, dev);
> + SET_NETDEV_DEV(dev, &pdev->dev);
> +
> + err = register_cc770dev(dev);
> + if (err) {
> + dev_err(&pdev->dev,
> + "couldn't register CC700 device (err=%d)\n", err);
> + goto exit_free_cc770;
> + }
> +
> + return 0;
> +
> +exit_free_cc770:
> + free_cc770dev(dev);
> +exit_unmap_mem:
> + iounmap(base);
> +exit_release_mem:
> + release_mem_region(mem->start, mem_size);
> +
> + return err;
> +}
> +
> +static int __devexit cc770_platform_remove(struct platform_device *pdev)
> +{
> + struct net_device *dev = dev_get_drvdata(&pdev->dev);
> + struct cc770_priv *priv = netdev_priv(dev);
> + struct resource *mem;
> +
> + unregister_cc770dev(dev);
> + iounmap(priv->reg_base);
> + free_cc770dev(dev);
> +
> + mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
Can this fail?
> + if (mem)
> + release_mem_region(mem->start, resource_size(mem));
> + else
> + dev_err(&pdev->dev, "couldn't release mem region");
> +
> + return 0;
> +}
> +
> +static struct of_device_id __devinitdata cc770_platform_table[] = {
> + {.compatible = "bosch,cc770"}, /* CC770 from Bosch */
> + {.compatible = "intc,82527"}, /* AN82527 from Intel CP */
> + {},
> +};
> +
> +static struct platform_driver cc770_platform_driver = {
> + .driver = {
> + .name = DRV_NAME,
> + .owner = THIS_MODULE,
> + .of_match_table = cc770_platform_table,
> + },
> + .probe = cc770_platform_probe,
> + .remove = __devexit_p(cc770_platform_remove),
> +};
> +
> +module_platform_driver(cc770_platform_driver);
nice, I like the new module_platform_driver.
--
Pengutronix e.K. | Marc Kleine-Budde |
Industrial Linux Solutions | Phone: +49-231-2826-924 |
Vertretung West/Dortmund | Fax: +49-5121-206917-5555 |
Amtsgericht Hildesheim, HRA 2686 | http://www.pengutronix.de |
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 262 bytes --]
^ permalink raw reply
* Re: sam460ex, sm501 incorrect device id with kernel >=linux-2.6.39
From: Josh Boyer @ 2011-11-28 12:12 UTC (permalink / raw)
To: acrux; +Cc: linuxppc-dev
In-Reply-To: <20111127173748.9f235741.acrux_it@libero.it>
On Sun, Nov 27, 2011 at 11:37 AM, acrux <acrux_it@libero.it> wrote:
>
> Acube Sam460ex has SM502 as onboard video.
> I got this with any kernel newer than 2.6.38.x thus the framebuffer is lost too:
>
> root@sam4x0:~# diff dmesg-2.6.38.8 dmesg-2.6.39.4
> 1,2c1,3
> < Using PowerPC 44x Platform machine description
> < Linux version 2.6.38.8-Sam460ex (root@sam4x0) (gcc version 4.5.3 (CRUX PPC) ) #1 Fri Nov 11 22:07:53 CET 2011
> ---
>> Using Canyonlands machine description
>> Initializing cgroup subsys cpu
You seem to have switched from using the generic PowerPC 44x platform,
to using a Canyonlands kernel and/or DTB. Not sure why that is, but
it's probably not helping your issues at all.
>> Linux version 2.6.39.4-Sam460ex (root@sam4x0) (gcc version 4.5.3 (CRUX PPC) ) #1 Fri Nov 11 19:06:02 CET 2011
> 17c18
> [cut]
> 161,179c165,167
> < sm501 0001:00:06.0: SM501 At f5480000: Version 050100c0, 64 Mb, IRQ 19
> ---
>> sm501 0001:00:06.0: incorrect device id c0000105
Something is reading the device ID in the wrong endian (and probably
everything else).
josh
^ 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