This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

VRFBs and the "external abort on non-linefetch" error



Hi:

I'm using a 3530 and an OV5642 camera under 2.6.32 to capture a video stream.  Video works fine if I don't have to rotate it.  But since I have to rotate the stream, I'm trying to use 4 of the 12 SMS/VRFB contexts, one per camera kmem buffer, to do the rotation for me.

The first SMS ROT context is iomapped from its physical address of 0x6C000180 to 0xFC000180.  The code writes appropriate settings to the registers and then reads back for dmesg logging.  The readbacks seem sane, so I think the iomap is ok.

For the first attempt at using the VRFBs, I'm using 0-degree rotation (there should be no difference between pulling frames from kmembuf and the 0-degree VRFB)..  The first VRFBs at 0-degrees is iomapped from its physical address of 0x70000000 to 0xC7000000.

The code writes the physical memory address of the first kmem camera buffer (0x86400000) into the first SMS base address.  The dmesg log reports the correct address in the sms_ba register.

The userspace program uses memmap against the address the camera passes it via the V4L2 buffer structure.  This works when the code passes the kmem buffer address to the user program, but FAILS when the VRFB address is passed to the user program.

When I try to memcpy from the first VRFB address, I get "unhandled fault: external abort on non-linefetch (0x1018) at 0x406a6000".

So... what am I missing here?  Video works without using SMS/VRFB, so it has to be the way I'm using SMS/VRFB.

I'd be grateful for any help - thanks!

  • Hi Burt,

    Could specify which software you are using - android or linux and which release?

    Do you have any logs?

    BR

    Tsvetolin Shulev

  • H Tsvetolin,

    Linux 2.6.32 in a locally-developed development environment on proprietary hardware (not the TiEVM).  Currently booting/executing from SD for development but we boot from onboard flash using JFFS2 for product ship.  We're using DirectFB for display of video frame data.  Heh -- not a "standard" environment... as if there was such a thing!

    We've already demo'd this hardware to a customer using a prototype software system based on GTK and used GTK's rotation code (ugly and slow).  The goal is to use the OMAP'S SMS/VRFB to do full-speed (30fps) rotation.  The SMS/VRFB hooks were added to the camera driver and are configurable within a Kconfig script.

    What kind of log data would you like?  I can give you some debug output from dmesg, and probably some code snippets that show how the code was configured.

    (This isn't my first go-round with embedded Linux at the driver/app/network/filesystem level - yeh, all of it.  But, the error message is worrisome 'cuz it is generated in multiple locations under arch/arm, particularly in multiple entries in arch/ar,/mm/fault.c in the fsr_info[] array.  I don't have the kind of debugging facilities I'd like, like a properly configured JTAG for this system, so I'm kinda stuck.)

    Thanks!