Re: [PATCH v2 5/5] MIPS: Move cache setup to setup_arch().
|[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]|
Hi David: A little more info, if it's useful... On Mon, Jun 11, 2012 at 10:39 AM, David Daney <ddaney.cavm@xxxxxxxxx> wrote: >>> I've run into a problem in linux-3.5-rc1, and I've tracked it down >>> to this patch, MIPS: Move cache setup to setup_arch()., >>> commit 6650df3c380e0db558dbfec63ed860402c6afb2a. >>> >> >> Are you permitted to describe the problem in any additional detail? >> >> Knowing what type of system is affected and the nature of the problem >> would be useful in trying to arrive at a good solution. > >>> I'm running a single-CPU, PMC-Sierra RM7035C-based system. >>> >>> Before applying this patch, cca_setup() in arch/mips/mm/c-r4k.c >>> is called before coherency_setup() (called from rk4_cache_init()). >>> After applying the patch, it is called afterwards. Because >>> coherency_setup() relies on cca_setup() properly setting the >>> variable cca, it won't use the value of cca supplied on the >>> kernel command line. >>> >>> I haven't verified it, but I suspect the same problem will occur >>> with the call to setcoherentio(), also in c-r4k.c. >>> >>> Unfortunately, I don't have the knowledge to formulate a patch >>> to this problem, but I wanted to raise the issue. The board is the PMC-Sierra "Xiao Hu", described at http://www.linuxjournal.com/article/7854. The version I have has the 600 MHz RM7035C processor. The code supporting the board is not in-tree, unfortunately. I believe PMC-Sierra is no longer maintaining their BSP, but I've been keeping a copy of the kernel code up-to-date. Here is the info on the processor reported by PMON: CPU type RM7065. Rev 5.3. 600 MHz/100 MHz. Memory size 128 MB. Icache size 16 KB, 32/line (4 way) Dcache size 16 KB, 32/line (4 way) Scache size 256 KB, 32/line (4 way) I typically boot with the command-line options: root=/dev/hda1 cca=3 CPU information displayed upon booting is: CPU revision is: 00002753 (RM7000) FPU revision is: 00002750 Cache information displayed upon booting is: Primary instruction cache 16kB, VIPT, 4-way, linesize 32 bytes. Primary data cache 16kB, 4-way, VIPT, no aliases, linesize 32 bytes Secondary cache size 256K, linesize 32 bytes. Here are some snippets from the .config file (I've removed lines that are probably irrelevant to this problem): CONFIG_PMC_XIAOHU=y CONFIG_RWSEM_GENERIC_SPINLOCK=y CONFIG_GENERIC_HWEIGHT=y CONFIG_GENERIC_CALIBRATE_DELAY=y CONFIG_SCHED_OMIT_FRAME_POINTER=y CONFIG_CEVT_R4K_LIB=y CONFIG_CEVT_R4K=y CONFIG_CSRC_R4K_LIB=y CONFIG_CSRC_R4K=y # CONFIG_ARCH_DMA_ADDR_T_64BIT is not set CONFIG_DMA_NONCOHERENT=y CONFIG_CPU_LITTLE_ENDIAN=y CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y CONFIG_IRQ_CPU=y CONFIG_MIPS_L1_CACHE_SHIFT=5 # # CPU selection # CONFIG_CPU_RM7000=y CONFIG_SYS_HAS_CPU_RM7000=y CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y CONFIG_SYS_SUPPORTS_64BIT_KERNEL=y CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y CONFIG_CPU_SUPPORTS_64BIT_KERNEL=y # # Kernel type # CONFIG_32BIT=y # CONFIG_64BIT is not set CONFIG_PAGE_SIZE_4KB=y # CONFIG_PAGE_SIZE_16KB is not set # CONFIG_PAGE_SIZE_64KB is not set CONFIG_FORCE_MAX_ZONEORDER=11 CONFIG_BOARD_SCACHE=y CONFIG_RM7000_CPU_SCACHE=y CONFIG_CPU_HAS_PREFETCH=y CONFIG_MIPS_MT_DISABLED=y # CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set After adding in some debugging statements, I see that after applying the subject patch, coherency_setup() is called before cca_setup() is called. Before applying the patch, coherency_setup() is called after cca_setup(). cca_setup() grabs the value of the cca= command line parameter, and stores it in the variable cca. If no such command line parameter is given, cca uses its default value of -1. coherency_setup() then uses the cca variable when setting up the coherency mode. that value > I will think about how to fix it. > > David Daney Thanks. There is a line: __setup("cca=", cca_setup); that seems to be used to call cca_setup(). I don't know how the __setup() works, so I'm a little lost on the solution myself. Note that, besides the cca_setup(), there is also a routine setcoherentio() that is defined the same way as cca_setup(). I suspect that suffers from the same problem as cca_setup(). If there is any other information I can provide, please let me know! Thanks. Shane McDonald
[Linux MIPS Home] [LKML Archive] [Linux ARM] [Linux] [Git] [Photo] [Yosemite News] [Linux SCSI] [Linux Hams]