<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">&gt;Another easy way to make memory(ie..pages) non cacheble is use the</span><br style="font-family:arial,sans-serif;font-size:13px"><span style="font-family:arial,sans-serif;font-size:13px">&gt;below function,</span><br style="font-family:arial,sans-serif;font-size:13px">

<span style="font-family:arial,sans-serif;font-size:13px">&gt;dma_alloc_coherent(NULL, size, &amp;p, GFP_KERNEL);</span><br><div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">I did like what you said. With the timings,i can see it is reading directly from RAM. I have some doubts..</font></div>

<div style><font face="arial, sans-serif">--&gt; What exactly happend here? Here read/write are done by CPU or DMA controller?</font></div><div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">I am new to DMA kind of operations, i have one doubt in how to do DMA?</font></div>

<div style><font face="arial, sans-serif">Can you give me some example driver code, for this following case....</font></div><div style><br></div><div style><font face="arial, sans-serif">--&gt; I want to do a DMA from a mem mapped I/O (lets say physical 0x40000000) to RAM location @ 0x80000000. </font></div>

<div style><font face="arial, sans-serif">    How do you do this?</font></div><div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">Thanks</font></div><div style><font face="arial, sans-serif">Sandeep</font></div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, Mar 1, 2013 at 10:45 AM, Arun KS <span dir="ltr">&lt;<a href="mailto:getarunks@gmail.com" target="_blank">getarunks@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Thu, Feb 28, 2013 at 3:54 PM, sandeep kumar<br>
<div class="im">&lt;<a href="mailto:coolsandyforyou@gmail.com">coolsandyforyou@gmail.com</a>&gt; wrote:<br>
&gt;&gt;1. use early_param to get the physical start address and size of<br>
&gt;&gt; test_region, or you can just ignore this step and hard code to 510M and 2M<br>
&gt;&gt; for test purpose only.<br>
&gt;<br>
&gt;&gt;2. use ioremap_nocache() to map this region to a virtual region. note that<br>
&gt;&gt; this funtion may fail if you are asking a very large vitual memroy region.<br>
&gt; I did the following things,<br>
&gt;<br>
</div><div class="im">&gt; Thank you so much...It worked. With this i am able to measure RAM<br>
&gt; performance.<br>
<br>
</div>Another easy way to make memory(ie..pages) non cacheble is use the<br>
below function,<br>
dma_alloc_coherent(NULL, size, &amp;p, GFP_KERNEL);<br>
<br>
This will set the page tables attributes for this page no-cachable.<br>
All reads &amp; writes will always happen from main memory because MMU see<br>
the memory attribute for this page as non cacheble.<br>
<br>
Thanks,<br>
Arun<br>
<div class="HOEnZb"><div class="h5">&gt;<br>
&gt;<br>
&gt; On Thu, Feb 28, 2013 at 11:39 AM, sandeep kumar &lt;<a href="mailto:coolsandyforyou@gmail.com">coolsandyforyou@gmail.com</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; &gt;1. use early_param to get the physical start address and size of<br>
&gt;&gt; &gt; test_region, or you can just ignore this step and hard code to 510M and 2M<br>
&gt;&gt; &gt; for test purpose only.<br>
&gt;&gt;<br>
&gt;&gt; &gt;2. use ioremap_nocache() to map this region to a virtual region. note<br>
&gt;&gt; &gt; that this funtion may fail if you are asking a very large vitual memroy<br>
&gt;&gt; &gt; region.<br>
&gt;&gt; I did the following things,<br>
&gt;&gt; 1) Reserved 3MB memory through ATAGS<br>
&gt;&gt; 2) Wrote small driver to ioremap that memory in following way,<br>
&gt;&gt;<br>
&gt;&gt;  void *tcpm_base = ioremap_nocache(0x03B00000, SZ_3MB);<br>
&gt;&gt;  27             if(tcpm_base!=NULL)<br>
&gt;&gt;  28             {<br>
&gt;&gt;  29             printk(&quot;Jiffies %x %ld\n\n\n\n&quot;, jiffies, jiffies);<br>
&gt;&gt;  30             for(i=0;i&lt;SZ_4KB;i++)<br>
&gt;&gt;  31             src = readl(tcpm_base+i);<br>
&gt;&gt;  32             printk(&quot;Jiffies %x %ld\n\n\n\n&quot;, jiffies, jiffies);<br>
&gt;&gt;  33             }<br>
&gt;&gt;  34             else<br>
&gt;&gt;  35                 printk(&quot;unable to map 3MB\n&quot;);<br>
&gt;&gt;<br>
&gt;&gt; 3) I am getting the following error,<br>
&gt;&gt;<br>
&gt;&gt; [    1.876647] Unable to handle kernel paging request at virtual address<br>
&gt;&gt; ea82c000<br>
&gt;&gt; [    1.880950] pgd = c0004000<br>
&gt;&gt; [    1.883636] [ea82c000] *pgd=49818811, *pte=00000000, *ppte=00000000<br>
&gt;&gt; [    1.889892] Internal error: Oops: 7 [#1] PREEMPT<br>
&gt;&gt; [    1.894500] Modules linked in:<br>
&gt;&gt; [    1.897521] CPU: 0    Not tainted  (3.0.31-g1080f34-dirty #106)<br>
&gt;&gt; [    1.903442] PC is at sand_misc_init+0x4c/0xac<br>
&gt;&gt; [    1.907775] LR is at sand_misc_init+0x3c/0xac<br>
&gt;&gt; [    1.912109] pc : [&lt;c0022ee0&gt;]    lr : [&lt;c0022ed0&gt;]    psr: 80000013<br>
&gt;&gt; [    1.912139] sp : e982bf98  ip : 00000000  fp : 00000000<br>
&gt;&gt; [    1.923553] r10: 00000000  r9 : 00000000  r8 : 00000000<br>
&gt;&gt; [    1.928771] r7 : 00000000  r6 : c00461b4  r5 : ea828000  r4 : 00000000<br>
&gt;&gt; [    1.935272] r3 : 00003fff  r2 : 00003ffd  r1 : c07ea2cf  r0 : 00000063<br>
&gt;&gt; [    1.941802] Flags: Nzcv  IRQs on  FIQs on  Mode SVC_32  ISA ARM<br>
&gt;&gt; Segment kernel<br>
&gt;&gt; [    1.949096] Control: 10c57c7d  Table: 00404059  DAC: 00000015<br>
&gt;&gt; [    1.954803]<br>
&gt;&gt; [    1.954833] PC: 0xc0022e60:<br>
&gt;&gt; [    1.959075] 2e60  c09105f0 c0366554 c07ea27e c07ea296 e3a01000 e92d4010<br>
&gt;&gt; e1a02001 eb0a9acd<br>
&gt;&gt; [    1.967224] 2e80  e59f3008 e5830008 e3a00001 e8bd8010 c0dd8380 e92d4037<br>
&gt;&gt; e3a04000 e3a0063b<br>
&gt;&gt; [    1.975402] 2ea0  e3a01901 e1a02004 e5cd4007 e5cd4006 eb00b9aa e2505000<br>
&gt;&gt; 0a000019 e59f3070<br>
&gt;&gt; [    1.983551] 2ec0  e59f0070 e5931000 e5932000 eb18a072 e58d4000 e3033fff<br>
&gt;&gt; ea000007 e59d2000<br>
&gt;&gt; [    1.991699] 2ee0  e7952002 f57ff04f e6ef2072 e5cd2007 e59d2000 e2822001<br>
&gt;&gt; e58d2000 e59d2000<br>
&gt;&gt; [    1.999877] 2f00  e1520003 dafffff4 e59f3024 e59f0024 e5931000 e5932000<br>
&gt;&gt; e28dd00c e8bd4030<br>
&gt;&gt; [    2.008026] 2f20  ea18a05d e59f0010 e28dd00c e8bd4030 ea18a059 c08ea600<br>
&gt;&gt; c07ea2cf c07ea2e2<br>
&gt;&gt; [    2.016174] 2f40  e59f3040 e3a01000 e92d4010 e59f0038 e5932000 eb0a845a<br>
&gt;&gt; e59f3030 e3500000<br>
&gt;&gt; [    2.024353]<br>
&gt;&gt; [    2.024353] LR: 0xc0022e50:<br>
&gt;&gt; [    2.028594] 2e50  e3e00015 e8bd81fc c0dd8380 c07ea279 c09105f0 c0366554<br>
&gt;&gt; c07ea27e c07ea296<br>
&gt;&gt; [    2.036773] 2e70  e3a01000 e92d4010 e1a02001 eb0a9acd e59f3008 e5830008<br>
&gt;&gt; e3a00001 e8bd8010<br>
&gt;&gt; [    2.044921] 2e90  c0dd8380 e92d4037 e3a04000 e3a0063b e3a01901 e1a02004<br>
&gt;&gt; e5cd4007 e5cd4006<br>
&gt;&gt; [    2.053070] 2eb0  eb00b9aa e2505000 0a000019 e59f3070 e59f0070 e5931000<br>
&gt;&gt; e5932000 eb18a072<br>
&gt;&gt; [    2.061248] 2ed0  e58d4000 e3033fff ea000007 e59d2000 e7952002 f57ff04f<br>
&gt;&gt; e6ef2072 e5cd2007<br>
&gt;&gt; [    2.069396] 2ef0  e59d2000 e2822001 e58d2000 e59d2000 e1520003 dafffff4<br>
&gt;&gt; e59f3024 e59f0024<br>
&gt;&gt; [    2.077575] 2f10  e5931000 e5932000 e28dd00c e8bd4030 ea18a05d e59f0010<br>
&gt;&gt; e28dd00c e8bd4030<br>
&gt;&gt; [    2.085723] 2f30  ea18a059 c08ea600 c07ea2cf c07ea2e2 e59f3040 e3a01000<br>
&gt;&gt; e92d4010 e59f0038<br>
&gt;&gt; [    2.093872]<br>
&gt;&gt; [    2.093902] SP: 0xe982bf18:<br>
&gt;&gt; [    2.098144] bf18  382e3120 30393536 00205d35 000000d0 00004fff 00003b00<br>
&gt;&gt; 192d8000 ea82bfff<br>
&gt;&gt; [    2.106292] bf38  03b00000 ffffffff e982bf84 c00461b4 00000000 c0044dac<br>
&gt;&gt; 00000063 c07ea2cf<br>
&gt;&gt; [    2.114440] bf58  00003ffd 00003fff 00000000 ea828000 c00461b4 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.122619] bf78  00000000 00000000 00000000 e982bf98 c0022ed0 c0022ee0<br>
&gt;&gt; 80000013 ffffffff<br>
&gt;&gt; [    2.130767] bf98  00003ffd 0000a27e 00000000 c0037b4c c0022e94 c003f3fc<br>
&gt;&gt; e9814a80 00373231<br>
&gt;&gt; [    2.138946] bfb8  00000000 00000000 00000000 00000236 c0037b4c c003818c<br>
&gt;&gt; c00461b4 00000013<br>
&gt;&gt; [    2.147094] bfd8  00000000 00000000 00000000 c0008374 00000000 c0008300<br>
&gt;&gt; c00461b4 c00461b4<br>
&gt;&gt; [    2.155242] bff8  00000000 00000000 00000000 00000001 00000000 e9817940<br>
&gt;&gt; c08e8ef4 00000000<br>
&gt;&gt; [    2.163421]<br>
&gt;&gt; [    2.163421] R1: 0xc07ea24f:<br>
&gt;&gt; [    2.167663] a24c  65207265 726f7272 6f6c6220 25206b63 000a646c 706f6f6c<br>
&gt;&gt; 26006425 3e2d6f6c<br>
&gt;&gt; [    2.175842] a26c  635f6f6c 6d5f6c74 78657475 6f6f6c00 363c0070 6f6f6c3e<br>
&gt;&gt; 6d203a70 6c75646f<br>
&gt;&gt; [    2.183990] a28c  6f6c2065 64656461 363c000a 6f6f6c3e 6f203a70 6f207475<br>
&gt;&gt; 656d2066 79726f6d<br>
&gt;&gt; [    2.192138] a2ac  6162000a 6e696b63 69665f67 7300656c 6c657a69 74696d69<br>
&gt;&gt; 74756100 656c636f<br>
&gt;&gt; [    2.200317] a2cc  4a007261 69666669 25207365 6c252078 0a0a0a64 6e75000a<br>
&gt;&gt; 656c6261 206f7420<br>
&gt;&gt; [    2.208465] a2ec  2070616d 0a424d33 656d7000 65725f6d 6e6f6967 333c0073<br>
&gt;&gt; 656d703e 7325286d<br>
&gt;&gt; [    2.216613] a30c  736b3a29 635f7465 74616572 6e615f65 64615f64 61662064<br>
&gt;&gt; 000a6c69 703e343c<br>
&gt;&gt; [    2.224792] a32c  3a6d656d 6d6f7320 69687465 6920676e 65762073 77207972<br>
&gt;&gt; 676e6f72 6f79202c<br>
&gt;&gt; [    2.232940] a34c  72612075 6c632065 6e69736f 20612067 62206d76 696b6361<br>
&gt;&gt; 6120676e 6c61206e<br>
&gt;&gt; [    2.241119]<br>
&gt;&gt; [    2.241119] R5: 0xea827f80:<br>
&gt;&gt; [    2.245361] 7f80  ******** ******** ******** ******** ******** ********<br>
&gt;&gt; ******** ********<br>
&gt;&gt; [    2.253509] 7fa0  ******** ******** ******** ******** ******** ********<br>
&gt;&gt; ******** ********<br>
&gt;&gt; [    2.261688] 7fc0  ******** ******** ******** ******** ******** ********<br>
&gt;&gt; ******** ********<br>
&gt;&gt; [    2.269836] 7fe0  ******** ******** ******** ******** ******** ********<br>
&gt;&gt; ******** ********<br>
&gt;&gt; [    2.278015] 8000  00000000 00000000 00000000 00000000 00000000 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.286163] 8020  00000000 00000000 00000000 00000000 00000000 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.294311] 8040  00000000 00000000 00000000 00000000 00000000 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.302490] 8060  00000000 00000000 00000000 00000000 00000000 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.310638]<br>
&gt;&gt; [    2.310638] R6: 0xc0046134:<br>
&gt;&gt; [    2.314880] 6134  eb038dff eb02a1f9 e1a03007 e1a00005 e1a02006 eb025566<br>
&gt;&gt; e59f3008 e5834000<br>
&gt;&gt; [    2.323059] 6154  e8bd41f0 ea0259b3 c09059d4 c08fbcd4 c064e808 c0791c0d<br>
&gt;&gt; c0958220 e59fc020<br>
&gt;&gt; [    2.331207] 6174  e92d4007 e59f301c e59cc000 e1a02001 e59f1014 e58dc000<br>
&gt;&gt; eb055aab e3a00000<br>
&gt;&gt; [    2.339385] 6194  e8bd800e c0958220 c0791c27 c0791c1b e121f007 e1a00004<br>
&gt;&gt; e1a0e006 e1a0f005<br>
&gt;&gt; [    2.347534] 61b4  eb02959a e320f000 e59f300c e5932000 e2822001 e5832000<br>
&gt;&gt; e12fff1e c0958224<br>
&gt;&gt; [    2.355682] 61d4  e59f300c e5932000 e2422001 e5832000 e12fff1e c0958224<br>
&gt;&gt; e12fff1e e12fff1e<br>
&gt;&gt; [    2.363861] 61f4  e12fff1e e12fff1e eafffffe e59f3014 e92d4010 e5933004<br>
&gt;&gt; e3530000 08bd8010<br>
&gt;&gt; [    2.372009] 6214  e12fff33 e8bd8010 c0958224 e59f3014 e1a01000 e92d4010<br>
&gt;&gt; e5d30000 e1a0e00f<br>
&gt;&gt; [    2.380187] Process swapper (pid: 1, stack limit = 0xe982a2e8)<br>
&gt;&gt; [    2.385986] Stack: (0xe982bf98 to 0xe982c000)<br>
&gt;&gt; [    2.390319] bf80:<br>
&gt;&gt; 00003ffd 0000a27e<br>
&gt;&gt; [    2.398498] bfa0: 00000000 c0037b4c c0022e94 c003f3fc e9814a80 00373231<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.406646] bfc0: 00000000 00000236 c0037b4c c003818c c00461b4 00000013<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.414825] bfe0: 00000000 c0008374 00000000 c0008300 c00461b4 c00461b4<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.423004] [&lt;c0022ee0&gt;] (sand_misc_init+0x4c/0xac) from [&lt;c003f3fc&gt;]<br>
&gt;&gt; (do_one_initcall+0xd0/0x1a4)<br>
&gt;&gt; [    2.431915] [&lt;c003f3fc&gt;] (do_one_initcall+0xd0/0x1a4) from [&lt;c0008374&gt;]<br>
&gt;&gt; (kernel_init+0x74/0x118)<br>
&gt;&gt; [    2.440673] [&lt;c0008374&gt;] (kernel_init+0x74/0x118) from [&lt;c00461b4&gt;]<br>
&gt;&gt; (kernel_thread_exit+0x0/0x8)<br>
&gt;&gt; [    2.449462] Code: e58d4000 e3033fff ea000007 e59d2000 (e7952002)<br>
&gt;&gt; [    2.455566] ---[ end trace f76f3c76dcb9b9ef ]---<br>
&gt;&gt; [    2.460144] Kernel panic - not syncing: Attempted to kill init!<br>
&gt;&gt; [    2.466064] [&lt;c004ad10&gt;] (unwind_backtrace+0x0/0x12c) from [&lt;c064af70&gt;]<br>
&gt;&gt; (panic+0x90/0x1bc)<br>
&gt;&gt; [    2.474304] [&lt;c064af70&gt;] (panic+0x90/0x1bc) from [&lt;c00eb8dc&gt;]<br>
&gt;&gt; (do_exit+0xb8/0x734)<br>
&gt;&gt; [    2.481842] [&lt;c00eb8dc&gt;] (do_exit+0xb8/0x734) from [&lt;c0048f8c&gt;]<br>
&gt;&gt; (die+0x208/0x23c)<br>
&gt;&gt; [    2.489318] [&lt;c0048f8c&gt;] (die+0x208/0x23c) from [&lt;c004e158&gt;]<br>
&gt;&gt; (__do_kernel_fault+0x64/0x84)<br>
&gt;&gt; [    2.497558] [&lt;c004e158&gt;] (__do_kernel_fault+0x64/0x84) from<br>
&gt;&gt; [&lt;c004e3e0&gt;] (do_page_fault+0x268/0x288)<br>
&gt;&gt; [    2.506683] [&lt;c004e3e0&gt;] (do_page_fault+0x268/0x288) from [&lt;c003f270&gt;]<br>
&gt;&gt; (do_DataAbort+0x34/0x94)<br>
&gt;&gt; [    2.515350] [&lt;c003f270&gt;] (do_DataAbort+0x34/0x94) from [&lt;c0044dac&gt;]<br>
&gt;&gt; (__dabt_svc+0x4c/0x60)<br>
&gt;&gt; [    2.523590] Exception stack(0xe982bf50 to 0xe982bf98)<br>
&gt;&gt; [    2.528625] bf40:                                     00000063 c07ea2cf<br>
&gt;&gt; 00003ffd 00003fff<br>
&gt;&gt; [    2.536804] bf60: 00000000 ea828000 c00461b4 00000000 00000000 00000000<br>
&gt;&gt; 00000000 00000000<br>
&gt;&gt; [    2.544952] bf80: 00000000 e982bf98 c0022ed0 c0022ee0 80000013 ffffffff<br>
&gt;&gt; [    2.551544] [&lt;c0044dac&gt;] (__dabt_svc+0x4c/0x60) from [&lt;c0022ee0&gt;]<br>
&gt;&gt; (sand_misc_init+0x4c/0xac)<br>
&gt;&gt; [    2.559967] [&lt;c0022ee0&gt;] (sand_misc_init+0x4c/0xac) from [&lt;c003f3fc&gt;]<br>
&gt;&gt; (do_one_initcall+0xd0/0x1a4)<br>
&gt;&gt; [    2.568908] [&lt;c003f3fc&gt;] (do_one_initcall+0xd0/0x1a4) from [&lt;c0008374&gt;]<br>
&gt;&gt; (kernel_init+0x74/0x118)<br>
&gt;&gt; [    2.577667] [&lt;c0008374&gt;] (kernel_init+0x74/0x118) from [&lt;c00461b4&gt;]<br>
&gt;&gt; (kernel_thread_exit+0x0/0x8)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Any idea what went wrong.<br>
&gt;&gt; I am sure about the ioremap() start address, thats what i reserved in<br>
&gt;&gt; ATAGS.<br>
&gt;&gt;<br>
&gt;&gt; Thanks<br>
&gt;&gt; Sandeep<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Feb 28, 2013 at 10:30 AM, sandeep kumar<br>
&gt;&gt; &lt;<a href="mailto:coolsandyforyou@gmail.com">coolsandyforyou@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;1. use early_param to get the physical start address and size of<br>
&gt;&gt;&gt; &gt; test_region, or you can just ignore this step and hard code to 510M and 2M<br>
&gt;&gt;&gt; &gt; for test purpose only.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt;2. use ioremap_nocache() to map this region to a virtual region. note<br>
&gt;&gt;&gt; &gt; that this funtion may fail if you are asking a very large vitual memroy<br>
&gt;&gt;&gt; &gt; region.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Sounds good, i am gonna try this and let you know.. :)<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Wed, Feb 27, 2013 at 8:19 PM, buyitian &lt;<a href="mailto:buyit@live.cn">buyit@live.cn</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; ----------------------------------------<br>
&gt;&gt;&gt;&gt; &gt; From: <a href="mailto:buyit@live.cn">buyit@live.cn</a><br>
&gt;&gt;&gt;&gt; &gt; To: <a href="mailto:coolsandyforyou@gmail.com">coolsandyforyou@gmail.com</a>; <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt;&gt;&gt; &gt; Subject: RE: How to measure the RAM read/write performance<br>
&gt;&gt;&gt;&gt; &gt; Date: Wed, 27 Feb 2013 22:33:15 +0800<br>
&gt;&gt;&gt;&gt; &gt; CC: <a href="mailto:dhylands@gmail.com">dhylands@gmail.com</a><br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; ________________________________<br>
&gt;&gt;&gt;&gt; &gt; &gt; From: <a href="mailto:coolsandyforyou@gmail.com">coolsandyforyou@gmail.com</a><br>
&gt;&gt;&gt;&gt; &gt; &gt; Date: Tue, 26 Feb 2013 17:01:54 +0530<br>
&gt;&gt;&gt;&gt; &gt; &gt; Subject: How to measure the RAM read/write performance<br>
&gt;&gt;&gt;&gt; &gt; &gt; To: <a href="mailto:kernelnewbies@kernelnewbies.org">kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt;&gt;&gt; &gt; &gt; CC: <a href="mailto:dhylands@gmail.com">dhylands@gmail.com</a><br>
&gt;&gt;&gt;&gt; &gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt; Hi All<br>
&gt;&gt;&gt;&gt; &gt; &gt; In performance benchmark tools, When we profile read/write timings<br>
&gt;&gt;&gt;&gt; &gt; &gt; mostly, those read/writes are done to cache only.<br>
&gt;&gt;&gt;&gt; &gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt; I want to measure my DDR(RAM chip) performance.<br>
&gt;&gt;&gt;&gt; &gt; &gt; So i want to make sure, every read/write should happen to DDR RAM<br>
&gt;&gt;&gt;&gt; &gt; &gt; chip only.<br>
&gt;&gt;&gt;&gt; &gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt; How can i achieve this...Any ideas/suggestions...?<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; try to reserve a large region from bootloader(L4 in Qualcomm<br>
&gt;&gt;&gt;&gt; &gt; platform), let&#39;s say it is 10MB continuous physical memory.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; sorry, to be accurate, reserve physical memory is done by kernel<br>
&gt;&gt;&gt;&gt; cmdline, this cmdline parameter can be passed from L4 to kernel, or configed<br>
&gt;&gt;&gt;&gt; by kernel itself.<br>
&gt;&gt;&gt;&gt; the cmdline will be like below:<br>
&gt;&gt;&gt;&gt; mem=510M@0 test_region=2M@510M<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; above example tells kernel you have totally 512MB physical memory, but<br>
&gt;&gt;&gt;&gt; kernel will only use the first 510MB, the latter 2MB memory is used by you.<br>
&gt;&gt;&gt;&gt; how to map and use this region depends on you.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; in kernel, map this region to an continuous virtual region, note that<br>
&gt;&gt;&gt;&gt; &gt; the pgprot should be uncachable since you want to test without cache.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 1. use early_param to get the physical start address and size of<br>
&gt;&gt;&gt;&gt; test_region, or you can just ignore this step and hard code to 510M and 2M<br>
&gt;&gt;&gt;&gt; for test purpose only.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; 2. use ioremap_nocache() to map this region to a virtual region. note<br>
&gt;&gt;&gt;&gt; that this funtion may fail if you are asking a very large vitual memroy<br>
&gt;&gt;&gt;&gt; region.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; &gt; once you configed like this, you can read/write to this vitual region<br>
&gt;&gt;&gt;&gt; &gt; without data cache invovled.<br>
&gt;&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt; --<br>
&gt;&gt;&gt;&gt; &gt; &gt; With regards,<br>
&gt;&gt;&gt;&gt; &gt; &gt; Sandeep Kumar Anantapalli,<br>
&gt;&gt;&gt;&gt; &gt; &gt;<br>
&gt;&gt;&gt;&gt; &gt; &gt; _______________________________________________ Kernelnewbies<br>
&gt;&gt;&gt;&gt; &gt; &gt; mailing<br>
&gt;&gt;&gt;&gt; &gt; &gt; list <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt;&gt;&gt; &gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt;&gt; &gt; Kernelnewbies mailing list<br>
&gt;&gt;&gt;&gt; &gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt;&gt;&gt;&gt; &gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; With regards,<br>
&gt;&gt;&gt; Sandeep Kumar Anantapalli,<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; With regards,<br>
&gt;&gt; Sandeep Kumar Anantapalli,<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; --<br>
&gt; With regards,<br>
&gt; Sandeep Kumar Anantapalli,<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Kernelnewbies mailing list<br>
&gt; <a href="mailto:Kernelnewbies@kernelnewbies.org">Kernelnewbies@kernelnewbies.org</a><br>
&gt; <a href="http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies" target="_blank">http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies</a><br>
&gt;<br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br>With regards,<br>Sandeep Kumar Anantapalli,<br>
</div>