[RFC PATCH 1/1] powerpc/embedded6xx: Add support for Motorola/Emerson MVME5100.

Stephen N Chivers schivers at csc.com.au
Fri Aug 30 08:36:23 EST 2013


Stephen N Chivers/AUS/CSC wrote on 08/22/2013 10:58:10 AM:

> From: Stephen N Chivers/AUS/CSC
> To: Scott Wood <scottwood at freescale.com>
> Cc: benh at kernel.crashing.org, Chris Proctor <cproctor at csc.com.au>, 
> linuxppc-dev at lists.ozlabs.org, paulus at samba.org, Stephen N Chivers 
> <schivers at csc.com.au>
> Date: 08/22/2013 10:58 AM
> Subject: Re: [RFC PATCH 1/1] powerpc/embedded6xx: Add support for 
> Motorola/Emerson MVME5100.
> 
> Scott Wood <scottwood at freescale.com> wrote on 08/21/2013 09:20:03 AM:
> 
> > From: Scott Wood <scottwood at freescale.com>
> > To: Stephen N Chivers <schivers at csc.com.au>
> > Cc: <benh at kernel.crashing.org>, Chris Proctor <cproctor at csc.com.au>,
> > <linuxppc-dev at lists.ozlabs.org>, <paulus at samba.org>
> > Date: 08/21/2013 09:20 AM
> > Subject: Re: [RFC PATCH 1/1] powerpc/embedded6xx: Add support for 
> > Motorola/Emerson MVME5100.
> > 
> > On Tue, 2013-08-20 at 13:28 +1100, Stephen N Chivers wrote:
> > > Scott Wood <scottwood at freescale.com> wrote on 08/09/2013 11:35:20 
AM:
> > > 
> > > > From: Scott Wood <scottwood at freescale.com>
> > > > To: Stephen N Chivers <schivers at csc.com.au>
> > > > Cc: <benh at kernel.crashing.org>, <paulus at samba.org>, Chris Proctor 
> > > > <cproctor at csc.com.au>, <linuxppc-dev at lists.ozlabs.org>
> > > > Date: 08/09/2013 11:36 AM
> > > > Subject: Re: [RFC PATCH 1/1] powerpc/embedded6xx: Add support for 
> > > > Motorola/Emerson MVME5100.
> > > > 
> > > > simple-bus may be applicable here (in addition to a specific
> > > > compatible).
> > > >
> > > The HAWK ASIC is a difficult beast. I still cannot get a positive
> > > identification as to what it is (Motorola/Freescale part number
> > > unknown, not even the part number on the chip on the board 
helps....).
> > > The best I can come up with is that it is a tsi108 without
> > > the ethenets.
> > > So device_type will be tsi-bridge and compatible will be
> > > tsi108-bridge.
> > 
> > Don't use device_type.  compatible should include "hawk" in the name
> > (especially if you're not sure what's really in it), and/or the part
> > number on the chip.  If you're convinced it's fully compatible with
> > tsi108-bridge you can add that as a second compatible value, though
> > given the uncertainty it's probably better to just teach Linux to look
> > for the new compatible.
> > 
> > If devices on the bus can be used without any special bus setup or
> > knowledge, then you can add a compatible of "simple-bus" to the end.
> > 
> > > > Why not just look for a chrp,iic node directly?
> > > >
> > > I was following the model used in other places, like chrp/setup.c.
> > 
> > Not all examples are good examples. :-)
> > 
> > > > > +       if ((np = of_find_compatible_node(NULL, "pci", 
> "mpc10x-pci"))) 
> > > {
> > > > 
> > > > Why insist on the device_type?
> > > >
> > > Following the model in the linkstation (kurobox) platform support. 
> > 
> > Drop the device_type check.
> > 
> > > > > +static void
> > > > > +mvme5100_restart(char *cmd)
> > > > > +{
> > > > > +       volatile ulong          i = 10000000;
> > > > > +
> > > > > +
> > > > > +       local_irq_disable();
> > > > > +       _nmask_and_or_msr(0, MSR_IP);
> > > > 
> > > > Does "mtmsr(mfmsr() | MSR_IP)" not work?
> > > >
> > > Don't know. Is from the original code by Matt Porter.
> > 
> > It actually appears that there are no callers remaining that use the
> > "and" portion of the functionality.  In fact there are no callers that
> > use it for anything other than setting MSR_IP. :-P
> > 
> > > > > +       out_8((u_char *) BOARD_MODRST_REG, 0x01);
> > > > > +
> > > > > +       while (i-- > 0);
> > > > 
> > > > Do not use a loop to implement a delay.
> > > >
> > > Taken from the original code. But at this point the board
> > > is going to reset and reboot via firmware, as /sbin/reboot
> > > or /sbin/halt has been invoked.
> > 
> > Still, it's just a bad idea.  What's wrong with udelay()?
> > 
> > Or just use an infinite loop.  How much value is there really in 
timing
> > out here?
> > 
> > > > > +static void __init
> > > > > +mvme5100_set_bat(void)
> > > > > +{
> > > > > +
> > > > > +
> > > > > +       mb();
> > > > > +       mtspr(SPRN_DBAT1U, 0xf0001ffe);
> > > > > +       mtspr(SPRN_DBAT1L, 0xf000002a);
> > > > > +       mb();
> > > > > +       setbat(1, 0xfe000000, 0xfe000000, 0x02000000, 
> > > PAGE_KERNEL_NCG);
> > > > > +}
> > > > 
> > > > It is no longer allowed to squat on random virtual address space 
like
> > > > this.  If you really need a BAT you'll have to allocate the 
virtual
> > > > address properly.
> > > >
> > > Yes. I found that this was an anathema when researching the port in
> > > 2010 but I couldn't find any practical solution at the time.
> > > The code is called early to ensure that the hawk registers are 
available.
> > > sysdev/cpm_common.c does the same thing.
> > 
> > > What is the correct solution?
> > 
> > ioremap() has special code to function early (using ioremap_bot).
> > 
> > If you still need to use a BAT that early, reserve the space with
> > asm/fixmap.h or by adding a function to the early ioremap code to just
> > reserve the space.  Or better, improve the ioremap code to be capable 
of
> > creating a BAT (or equivalent) when requested.
> >
> It is really interesting. Given that the UART implementation on the
> HAWK is such that legacy_serial will not set up an early console it
> is very likely that the address translation set up by the bat is not
> required.
> I can probably replace the physical addresses used in:
> 
>  setup_indirec_pci(hose, 0, 0xfe000cf8, 0xfe000cfc, 0);
> 
> with remapped equivalents. But, with the setbat eliminated, the
> line:
> 
>  pcibios_alloc_controller(dev);
> 
> silently (remember no early console, due to UART reg-shift) panics.
> It is happening at the point where the newly allocated PHB
> structure is being added to the "hose_list" in pci-common.c.
> 
> So, I think there is some side effect due to the call to the setbat with 
the
> PAGE_KERNEL_NCG parameter that I do not yet understand.
>
The problem has disappeared after rearranging the code in the board 
support
file (moving mvme5100_setup_bridge did the trick) and I now have a booting
MVME5100 without resorting to "setbat" in early initialization. 
> > -Scott
> > 
> > 
> > 



More information about the Linuxppc-dev mailing list