2 /* be warned, this file will be used core 0/node 0 only */
3 static inline __attribute__((always_inline)) void clear_1m_ram(void)
8 "movl %%cr0, %%eax\n\t"
9 "orl $(0x1<<30),%%eax\n\t"
10 "movl %%eax, %%cr0\n\t"
12 /* enable caching for first 1M using variable mtrr */
13 "movl $0x200, %%ecx\n\t"
14 "xorl %%edx, %%edx\n\t"
15 "movl $(0 | 1), %%eax\n\t"
16 // "movl $(0 | MTRR_TYPE_WRCOMB), %%eax\n\t"
19 "movl $0x201, %%ecx\n\t"
20 "movl $0x0000000f, %%edx\n\t"
22 "movl %%esi, %%eax\n\t"
24 "movl $((~(( 0 + (CONFIG_LB_MEM_TOPK<<10) ) -1)) | 0x800), %%eax\n\t"
28 /* clear the first 1M */
30 "movl %%edi, %%ecx\n\t"
32 "movl $((CONFIG_LB_MEM_TOPK<<10)>>2), %%ecx\n\t"
34 "xorl %%edi, %%edi\n\t"
36 "xorl %%eax, %%eax\n\t"
40 "movl %%cr0, %%eax\n\t"
41 "orl $(0x1<<30),%%eax\n\t"
42 "movl %%eax, %%cr0\n\t"
44 /* enable caching for first 1M using variable mtrr */
45 "movl $0x200, %%ecx\n\t"
46 "xorl %%edx, %%edx\n\t"
47 "movl $(0 | 6), %%eax\n\t"
48 // "movl $(0 | MTRR_TYPE_WRBACK), %%eax\n\t"
51 "movl $0x201, %%ecx\n\t"
52 "movl $0x0000000f, %%edx\n\t"
54 "movl %%esi, %%eax\n\t"
56 "movl $((~(( 0 + (CONFIG_LB_MEM_TOPK<<10) ) -1)) | 0x800), %%eax\n\t"
61 "movl %%cr0, %%eax\n\t"
62 "andl $0x9fffffff,%%eax\n\t"
63 "movl %%eax, %%cr0\n\t"
68 "S"((~(( 0 + (CONFIG_LB_MEM_TOPK<<10) ) -1)) | 0x800), "D" ((CONFIG_LB_MEM_TOPK<<10)>>2)