Hello MIPS gurus!
I'm adding support for Sigma Designs SMP8652/SMP8654 (Tango3 family,
MIPS 24kf CPU) to newer kernel. I've selectively adapted patches from
22.214.171.124 (the latest officially available for us) to the latest mips
3.18 stable branch and things seem to work (it boots, runs simple test
programs), but there are few questions which I was not able to resolve
yet with my limited experience:
1. They (Sigma Designs) have overridden __fast_iob which is identical to
the default one except for one line:
: "m" (*(int *)CKSEG1)
is replaced with:
: "m" (*(int *)(CKSEG1+CPU_REMAP_SPACE))
where CPU_REMAP_SPACE=0x4000000 is a compile time constant for Tango3
and also called KERNEL_START_ADDRESS in Makefiles. The same value is
also written to ebase:
ebase = KSEG0ADDR(CPU_REMAP_SPACE);
while writing ebase is really necessary for the kernel to boot, I've not
found any negative effects of not applying __fast_iob patch. What is it
supposed to do?
2. In io.h they have added explicit __sync() to the end of
pfx##write##bwlq and pfx##out##bwlq##p. Is this really necessary? I've
not yet found any adverse effects of not doing so. Maybe this was a
workaround for some old kernel issue which was fixed since then?
3. In c-r4k.c:r4k_cache_init() they assign:
flush_icache_page = r4k_flush_icache_page;
static void r4k_flush_icache_page(struct vm_area_struct *vma,
struct page *page)
(unsigned long)page_address(page) + PAGE_SIZE);
thus overriding default empty flush_icache_page.
By digging the archives I've found some talks about removing
flush_icache_page. Various sources says it should not be necessary.
Maybe this is board-specific workaround?
I would really appreciate some explanations on what these changes
supposed to solve or pointers to some background info to better
understand what I'm actually doing. The main concern is that not
properly applying the changes might break something subtly, and, on the
contrary, applying everything might conflict with some fixes in newer
kernel and break something subtly - the sadness.
Thanks a lot!