83xx GPIO/EXT int in arch/powerpc/

Marc Leeman marc.leeman at gmail.com
Wed Jun 13 02:06:28 EST 2007


> I'm confused what you are comparing here, 3 seconds on arch=ppc vs  
> over a minute on arch=powerpc?

Loading of a TI DSP over HPI. HPI is implemented in UPMB (programmed by
U-Boot); all that the kernel has to do is write to the in U-Boot
programmed location (0xe2400000) to trigger the UPMB HPI protocol.

> I'd expect the driver to be exactly the same (or close to it) for  
> arch=ppc vs arch=powerpc.

Same here: there are a number of performance issues wrt to an older 8245
based implementation (network seems slower too) and this was not one I
expected while switching to powerpc.

> There shouldn't be, but if you are seeing this we really should  
> figure out what's going on.
> 
> What kernel is this on?  What processor are you using?

$ cat /proc/cpuinfo
processor       : 0
cpu             : e300c1
clock           : 396.000000MHz
revision        : 1.1 (pvr 8083 0011)
bogomips        : 131.28
timebase        : 66000000
platform        : BARCO834x SVC2

$ uname -a
Linux barco 2.6.21.1-barco1 #1 PREEMPT Tue Jun 12 09:48:12 CEST 2007 ppc unknown

The board is based on the FreeScale SYS/EMDS reference design.

Most of the HPI operations are stuff like this:

static inline int8_t _hpi_set_hhwil(uint8_t b)
{
        volatile immap_t* im;

        if(!(im = ioremap((immrbar),sizeof(struct immap)))){
                return -EINVAL;
        }
        (b)?(im->gpio[0].dat |= HHWIL):(im->gpio[0].dat &= ~HHWIL);
        iounmap(im);

        return 0;
}

static inline uint32_t __hpi_read_hpid(void)
{
        uint32_t returnval;

        /* Program HPID */
        _hpi_set_hcntl1(1);
        _hpi_set_hcntl0(1);

        /* first halfword */
        _hpi_set_hhwil(0);
        /* dummy read */
        returnval = (((uint32_t)(*hpi_dsp))<<16);

        /* delay */
        udelay(1);

        /* second halfword */
        _hpi_set_hhwil(1);
        /* dummy read */
        returnval |= *hpi_dsp;

        /* delay */
        udelay(1);

        return returnval;
}

The ioremap was certainly a bottleneck; and moving it to initialisation
with a global pointer got us from 60 secs back to around 1 sec, but the
a similar effect was obtained on the ppc arch with this change (this was
just making a bad situation to be hidden).

Even after this change; the load of a streaming application was
something of 40% on ppc and 60% on powerpc.

-- 
  greetz, marc
I'm having sex with 3 hynerian donkeys. What does it look like i'm
doing?
	Chiana - Crackers Don't Matter
chiana 2.6.18-4-ixp4xx #1 Tue Mar 27 18:01:56 BST 2007 GNU/Linux
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.ozlabs.org/pipermail/linuxppc-dev/attachments/20070612/fe40494f/attachment.pgp>


More information about the Linuxppc-dev mailing list