source: svn/trunk/newcon3bcm2_21bu/BSEAV/lib/bprofile/bunit_cache.c @ 27

Last change on this file since 27 was 2, checked in by phkim, 11 years ago

1.phkim

  1. revision copy newcon3sk r27
  • Property svn:executable set to *
File size: 4.3 KB
Line 
1/***************************************************************************
2 *     Copyright (c) 2006, Broadcom Corporation
3 *     All Rights Reserved
4 *     Confidential Property of Broadcom Corporation
5 *
6 *  THIS SOFTWARE MAY ONLY BE USED SUBJECT TO AN EXECUTED SOFTWARE LICENSE
7 *  AGREEMENT  BETWEEN THE USER AND BROADCOM.  YOU HAVE NO RIGHT TO USE OR
8 *  EXPLOIT THIS MATERIAL EXCEPT SUBJECT TO THE TERMS OF SUCH AN AGREEMENT.
9 *
10 * $brcm_Workfile: bunit_cache.c $
11 * $brcm_Revision: 1 $
12 * $brcm_Date: 12/21/06 6:48p $
13 *
14 * Module Description:
15 *
16 * Profiler suite
17 *              CPU bus unit tests
18 *
19 * Revision History:
20 *
21 * $brcm_Log: /BSEAV/lib/bprofile/bunit_cache.c $
22 *
23 * 1   12/21/06 6:48p vsilyaev
24 * PR 26779: CPU cache latency test module
25 *
26 * 2   12/20/06 2:41p vsilyaev
27 * PR 26715: Fixed memory leak
28 *
29 * 1   12/20/06 10:44a vsilyaev
30 * PR 26715: CPU bus latency test module
31 *
32 *
33 *******************************************************************************/
34#include "bstd.h"
35#include "bkni.h"
36#include "batomic.h"
37#include "btrc.h"
38
39BTRC_MODULE(bunit_cache,ENABLE);
40
41#define  B_TEST_ROUNDS  (16*1024)
42
43#define b_nop() __asm__ __volatile__( \
44                ".set\tpush\n\t"  \
45                ".set\tnoreorder\n\t"       \
46                "       nop     \n" \
47                "       nop     \n"  \
48                ".set\tpop\n")
49
50#define b_nop_64() \
51        b_nop();b_nop();b_nop();b_nop(); /* 8 */ \
52        b_nop();b_nop();b_nop();b_nop(); /* 16 */ \
53        b_nop();b_nop();b_nop();b_nop(); /* 24 */ \
54        b_nop();b_nop();b_nop();b_nop(); /* 32 */ \
55        b_nop();b_nop();b_nop();b_nop(); /* 40 */ \
56        b_nop();b_nop();b_nop();b_nop(); /* 48 */ \
57        b_nop();b_nop();b_nop();b_nop(); /* 56 */ \
58        b_nop();b_nop();b_nop();b_nop()  /* 64 */
59
60#define b_nop_4096k() \
61        b_nop_64(); b_nop_64(); b_nop_64(); b_nop_64();  /* 1024 */ \
62        b_nop_64(); b_nop_64(); b_nop_64(); b_nop_64();  /* 2048 */ \
63        b_nop_64(); b_nop_64(); b_nop_64(); b_nop_64();  /* 3072 */ \
64        b_nop_64(); b_nop_64(); b_nop_64(); b_nop_64()  /* 4096 */ 
65
66static void
67b_test_icache_4k(volatile uint32_t *ptr, uint32_t val)
68{
69        unsigned i;
70        BSTD_UNUSED(val);
71        BSTD_UNUSED(ptr);
72
73        for(i=0;i<B_TEST_ROUNDS/4 ;i++) {
74                b_nop_4096k();
75        }
76}
77
78static void
79b_test_icache_8k(volatile uint32_t *ptr, uint32_t val)
80{
81        unsigned i;
82        BSTD_UNUSED(val);
83        BSTD_UNUSED(ptr);
84
85        for(i=0;i<B_TEST_ROUNDS/8;i++) {
86                b_nop_4096k();
87                b_nop_4096k();
88        }
89}
90
91static void
92b_test_icache_16k(volatile uint32_t *ptr, uint32_t val)
93{
94        unsigned i;
95        BSTD_UNUSED(val);
96        BSTD_UNUSED(ptr);
97
98        for(i=0;i<B_TEST_ROUNDS/16;i++) {
99                b_nop_4096k();
100                b_nop_4096k();
101                b_nop_4096k();
102                b_nop_4096k();
103        }
104}
105
106static void
107b_test_icache_32k(volatile uint32_t *ptr, uint32_t val)
108{
109        unsigned i;
110        BSTD_UNUSED(val);
111        BSTD_UNUSED(ptr);
112
113        for(i=0;i<B_TEST_ROUNDS/32;i++) {
114                b_nop_4096k();
115                b_nop_4096k();
116                b_nop_4096k();
117                b_nop_4096k();
118
119                b_nop_4096k();
120                b_nop_4096k();
121                b_nop_4096k();
122                b_nop_4096k();
123        }
124}
125
126static void
127b_test_icache_64k(volatile uint32_t *ptr, uint32_t val)
128{
129        unsigned i;
130        BSTD_UNUSED(val);
131        BSTD_UNUSED(ptr);
132
133        for(i=0;i<B_TEST_ROUNDS/64;i++) {
134                b_nop_4096k();
135                b_nop_4096k();
136                b_nop_4096k();
137                b_nop_4096k();
138
139                b_nop_4096k();
140                b_nop_4096k();
141                b_nop_4096k();
142                b_nop_4096k();
143
144                b_nop_4096k();
145                b_nop_4096k();
146                b_nop_4096k();
147                b_nop_4096k();
148
149                b_nop_4096k();
150                b_nop_4096k();
151                b_nop_4096k();
152                b_nop_4096k();
153        }
154}
155
156static void 
157b_unit_bus_run(const char *name, volatile uint32_t *ptr, void (*test)(volatile uint32_t *ptr, uint32_t val))
158{
159        unsigned i;
160        BKNI_EnterCriticalSection();
161        for(i=0;i<5;i++) {
162                uint32_t val = *ptr;
163                BTRC_TRACE(bunit_cache, START);
164                test(ptr, val); 
165                BTRC_TRACE(bunit_cache, STOP);
166        }
167        BKNI_LeaveCriticalSection();
168        BKNI_Printf("test '%s' addr %#x\n", name, (unsigned)ptr);
169        BTRC_Module_Report(BTRC_MODULE_HANDLE(bunit_cache));
170        BTRC_Module_Reset(BTRC_MODULE_HANDLE(bunit_cache));
171        BKNI_Sleep(50);
172        return;
173}
174
175void 
176bunit_cache(void)
177{
178        void *addr = BKNI_Malloc(4); /* we use malloced memory because it would go from the KSEG0 (static memory is from KSEG2, and MMU mapped) */
179        volatile uint32_t *ptr = addr;
180        BDBG_ASSERT(addr);
181
182        b_unit_bus_run("b_test_icache_4k/cached", ptr, b_test_icache_4k);
183        b_unit_bus_run("b_test_icache_8k/cached", ptr, b_test_icache_8k);
184        b_unit_bus_run("b_test_icache_16k/cached", ptr, b_test_icache_16k);
185        b_unit_bus_run("b_test_icache_32k/cached", ptr, b_test_icache_32k);
186        b_unit_bus_run("b_test_icache_64k/cached", ptr, b_test_icache_64k);
187
188        BKNI_Free(addr);
189        return;
190}
191
Note: See TracBrowser for help on using the repository browser.