Date: Sat, 16 May 2015 11:46:16 +0200 From: =?UTF-8?B?TWFudWVsIFN0w7xobg==?= <freebsdnewbie@freenet.de> To: freebsd-arm@FreeBSD.org Subject: mmap()-caching Message-ID: <555711E8.3020802@freenet.de>
index | next in thread | raw e-mail
Hi list,
I'm trying to extend the TI-pru drivers' features on a Beaglebone Black.
Due the long compile time of a complete kernel i removed the driver
entry (device ti_pruss) from kernel-config and load it as kernel-module
instead. I'd copied the files sys/arm/ti/ti_pruss.[sh] to a sperate
folder and added this makefile:
% cat Makefile
.PATH: ${.CURDIR}
KMOD = ti_pruss
SRCS = ti_pruss.c
SRCS += bus_if.h device_if.h ofw_bus_if.h
CFLAGS += -DDEBUG
.include <bsd.kmod.mk>
%
It builds and loads fine, but its behavior is not exact the same as if
it is compiled into the kernel statically.
The ti-pruss driver reveals the pru internals by implementing the mmap()
stub and marks this area uncacheable. This works perfectly if this
driver is compiled directly into the kernel! But when i use these very
same files and build a kernel module instead, there seems to be caching
active. I recognize this by using a ported version of prudebug[1] and
singlestepping through pru-code. If there is caching active, single step
does not result in a step.
I've put some debug-outputting to the mmap()-stub of the driver-module
to print out the memory-attributes (vm_memattr_t *memattr); this output
looks like:
ti_pruss_mmap: *memattr: 0x00000001
so to me it seems, that the VM_MEMATTR_UNCACHEABLE is set in *memattr.
How can i provide the same behavior for the module as for the built-in
driver?
Thanks,
Manuel
[1] http://sourceforge.net/projects/prudebug/
help
Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?555711E8.3020802>
