linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* SPARSEMEM support for Atmel AT91SAM9G45 and M10
       [not found]   ` <201005261610.32937.marek.vasut@gmail.com>
@ 2010-05-27  8:15     ` Yegor Yefremov
  2010-05-27 15:13       ` Marek Vasut
  0 siblings, 1 reply; 3+ messages in thread
From: Yegor Yefremov @ 2010-05-27  8:15 UTC (permalink / raw)
  To: linux-arm-kernel

Marek Vasut schrieb:
> Dne St 26. kv?tna 2010 15:46:21 Yegor Yefremov napsal(a):
>>>     I'm resurrecting an old thread
>>>
>>> (http://lists.arm.linux.org.uk/lurker/message/20090914.072902.97115112.en
>>> .html) about using the two memory banks available
>>> on Atmel AT91SAM9G45/M10. I managed to make it work on 2.6.30 by
>>> following Russell King advice on how to configure SPARSEMEM.
>>>
>>>     I submitted a working patch for 2.6.34 here:
>>> http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=6143/1
>>>
>>> The problem is that I'm unsure how to get rid of the #define that
>>> forces high_memory value in mm/init.c, should I add a fixup function
>>> to board-sam9m10g45ek.c to provide meminfo information ?
>> I've already tested the patch on 2.6.33 and it is working properly.
>> Concerning high_memory value problem I think the cause is how
>> find_node_limits() in arch/arm/m/init.c is implemented. We have two memory
>> banks one starting at 0x70000000 and another at 0x200000000. The virtual
>> mapping looks like this:
>>
>> 0x70000000 -> 0xc0000000
>> 0x20000000 -> 0xc8000000
>>
>> However find_node_limits() routine is working with physical addresses so
>> the upper limit is 0x70000000 and not 0x20000000 as it should be. As a
>> result max_low is pointing to 0x70000000 and that's why only first bank
>> will be mapped correctly.
>>
>> How can find_node_limits() be changed to work with virtual addresses?
>>
>> Regards,
>> Yegor
>>
> Hey, try searching for "[PATCH 1/5] pxa/vpac270: Enable SparseMEM for 256 MB of 
> RAM" ... The device has also one memory bank mapped under the primary one. Maybe 
> that can help. Cheers


Marek, I've looked at patch and apart from defining HIGH_MEMORY_VIRT it does the same. Nevertheless if I don't define HIGH_MEMORY_VIRT I get the following crash (I've added debug string showing calculated high_memory. It should be 0xd0000000 and not 0xc8000000):

Linux version 2.6.33.2 (OpenRISC at VScom) (gcc version 4.3.2 (crosstool-NG-1.3.2)
) #30 Thu May 27 10:06:42 CEST 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: Atmel AT91SAM9G45-EKES
Memory policy: ECC disabled, Data cache writeback
DBG: high_memory 0xc8000000
Clocks: CPU 400 MHz, master 133 MHz, main 12.000 MHz
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 62720
Kernel command line: console=ttyS0,115200 root=/dev/mtdblock2 rootwait
PID hash table entries: 1024 (order: 0, 4096 bytes)
Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
Memory: 128MB 128MB = 256MB total
Memory: 255036KB available (3944K code, 303K data, 140K init, 0K highmem)
Hierarchical RCU implementation.
NR_IRQS:192
AT91: 160 gpio irqs in 5 banks
Console: colour dummy device 80x30
console [ttyS0] enabled
Calibrating delay loop... 199.47 BogoMIPS (lpj=997376)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency:
------------[ cut here ]------------
WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
Modules linked in:
[<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>] (warn_slowpath_common+0x4c/0x80)
[<c0043c34>] (warn_slowpath_common+0x4c/0x80) from [<c008df9c>] (vmap_page_range_noflush+0x128/0x1d8)
[<c008df9c>] (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>] (map_vm_area+0x28/0x50)
[<c008e074>] (map_vm_area+0x28/0x50) from [<c008e4f8>] (vmap+0x48/0x6c)
[<c008e4f8>] (vmap+0x48/0x6c) from [<c000cf60>] (check_writebuffer_bugs+0x5c/0x134)
[<c000cf60>] (check_writebuffer_bugs+0x5c/0x134) from [<c0008b9c>] (start_kernel+0x31c/0x388)
[<c0008b9c>] (start_kernel+0x31c/0x388) from [<70008034>] (0x70008034)
---[ end trace 1b75b31a2719ed1c ]---
------------[ cut here ]------------
WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
Modules linked in:
[<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>] (warn_slowpath_common+0x4c/0x80)
[<c0043c34>] (warn_slowpath_common+0x4c/0x80) from [<c008df9c>] (vmap_page_range_noflush+0x128/0x1d8)
[<c008df9c>] (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>] (map_vm_area+0x28/0x50)
[<c008e074>] (map_vm_area+0x28/0x50) from [<c008e4f8>] (vmap+0x48/0x6c)
[<c008e4f8>] (vmap+0x48/0x6c) from [<c000cf78>] (check_writebuffer_bugs+0x74/0x134)
[<c000cf78>] (check_writebuffer_bugs+0x74/0x134) from [<c0008b9c>] (start_kernel+0x31c/0x388)
[<c0008b9c>] (start_kernel+0x31c/0x388) from [<70008034>] (0x70008034)
---[ end trace 1b75b31a2719ed1d ]---
failed, unable to map memory

Any ideas?

Yegor

^ permalink raw reply	[flat|nested] 3+ messages in thread

* SPARSEMEM support for Atmel AT91SAM9G45 and M10
  2010-05-27  8:15     ` SPARSEMEM support for Atmel AT91SAM9G45 and M10 Yegor Yefremov
@ 2010-05-27 15:13       ` Marek Vasut
  2010-05-28  7:42         ` Yegor Yefremov
  0 siblings, 1 reply; 3+ messages in thread
From: Marek Vasut @ 2010-05-27 15:13 UTC (permalink / raw)
  To: linux-arm-kernel

Dne ?t 27. kv?tna 2010 10:15:59 Yegor Yefremov napsal(a):
> Marek Vasut schrieb:
> > Dne St 26. kv?tna 2010 15:46:21 Yegor Yefremov napsal(a):
> >>>     I'm resurrecting an old thread
> >>> 
> >>> (http://lists.arm.linux.org.uk/lurker/message/20090914.072902.97115112.
> >>> en .html) about using the two memory banks available
> >>> on Atmel AT91SAM9G45/M10. I managed to make it work on 2.6.30 by
> >>> following Russell King advice on how to configure SPARSEMEM.
> >>> 
> >>>     I submitted a working patch for 2.6.34 here:
> >>> http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=6143/1
> >>> 
> >>> The problem is that I'm unsure how to get rid of the #define that
> >>> forces high_memory value in mm/init.c, should I add a fixup function
> >>> to board-sam9m10g45ek.c to provide meminfo information ?
> >> 
> >> I've already tested the patch on 2.6.33 and it is working properly.
> >> Concerning high_memory value problem I think the cause is how
> >> find_node_limits() in arch/arm/m/init.c is implemented. We have two
> >> memory banks one starting at 0x70000000 and another at 0x200000000. The
> >> virtual mapping looks like this:
> >> 
> >> 0x70000000 -> 0xc0000000
> >> 0x20000000 -> 0xc8000000
> >> 
> >> However find_node_limits() routine is working with physical addresses so
> >> the upper limit is 0x70000000 and not 0x20000000 as it should be. As a
> >> result max_low is pointing to 0x70000000 and that's why only first bank
> >> will be mapped correctly.
> >> 
> >> How can find_node_limits() be changed to work with virtual addresses?
> >> 
> >> Regards,
> >> Yegor
> > 
> > Hey, try searching for "[PATCH 1/5] pxa/vpac270: Enable SparseMEM for 256
> > MB of RAM" ... The device has also one memory bank mapped under the
> > primary one. Maybe that can help. Cheers
> 
> Marek, I've looked at patch and apart from defining HIGH_MEMORY_VIRT it
> does the same. Nevertheless if I don't define HIGH_MEMORY_VIRT I get the
> following crash (I've added debug string showing calculated high_memory.
> It should be 0xd0000000 and not 0xc8000000):
> 
> Linux version 2.6.33.2 (OpenRISC at VScom) (gcc version 4.3.2
> (crosstool-NG-1.3.2) ) #30 Thu May 27 10:06:42 CEST 2010
> CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
> CPU: VIVT data cache, VIVT instruction cache
> Machine: Atmel AT91SAM9G45-EKES
> Memory policy: ECC disabled, Data cache writeback
> DBG: high_memory 0xc8000000
> Clocks: CPU 400 MHz, master 133 MHz, main 12.000 MHz
> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 62720
> Kernel command line: console=ttyS0,115200 root=/dev/mtdblock2 rootwait
> PID hash table entries: 1024 (order: 0, 4096 bytes)
> Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
> Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
> Memory: 128MB 128MB = 256MB total
> Memory: 255036KB available (3944K code, 303K data, 140K init, 0K highmem)
> Hierarchical RCU implementation.
> NR_IRQS:192
> AT91: 160 gpio irqs in 5 banks
> Console: colour dummy device 80x30
> console [ttyS0] enabled
> Calibrating delay loop... 199.47 BogoMIPS (lpj=997376)
> Mount-cache hash table entries: 512
> CPU: Testing write buffer coherency:
> ------------[ cut here ]------------
> WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
> Modules linked in:
> [<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>]
> (warn_slowpath_common+0x4c/0x80) [<c0043c34>]
> (warn_slowpath_common+0x4c/0x80) from [<c008df9c>]
> (vmap_page_range_noflush+0x128/0x1d8) [<c008df9c>]
> (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>]
> (map_vm_area+0x28/0x50) [<c008e074>] (map_vm_area+0x28/0x50) from
> [<c008e4f8>] (vmap+0x48/0x6c) [<c008e4f8>] (vmap+0x48/0x6c) from
> [<c000cf60>] (check_writebuffer_bugs+0x5c/0x134) [<c000cf60>]
> (check_writebuffer_bugs+0x5c/0x134) from [<c0008b9c>]
> (start_kernel+0x31c/0x388) [<c0008b9c>] (start_kernel+0x31c/0x388) from
> [<70008034>] (0x70008034) ---[ end trace 1b75b31a2719ed1c ]---
> ------------[ cut here ]------------
> WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
> Modules linked in:
> [<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>]
> (warn_slowpath_common+0x4c/0x80) [<c0043c34>]
> (warn_slowpath_common+0x4c/0x80) from [<c008df9c>]
> (vmap_page_range_noflush+0x128/0x1d8) [<c008df9c>]
> (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>]
> (map_vm_area+0x28/0x50) [<c008e074>] (map_vm_area+0x28/0x50) from
> [<c008e4f8>] (vmap+0x48/0x6c) [<c008e4f8>] (vmap+0x48/0x6c) from
> [<c000cf78>] (check_writebuffer_bugs+0x74/0x134) [<c000cf78>]
> (check_writebuffer_bugs+0x74/0x134) from [<c0008b9c>]
> (start_kernel+0x31c/0x388) [<c0008b9c>] (start_kernel+0x31c/0x388) from
> [<70008034>] (0x70008034) ---[ end trace 1b75b31a2719ed1d ]---
> failed, unable to map memory
> 
> Any ideas?
> 
> Yegor

Do you have CONFIG_HIGHMEM enabled ? If so, why ?

^ permalink raw reply	[flat|nested] 3+ messages in thread

* SPARSEMEM support for Atmel AT91SAM9G45 and M10
  2010-05-27 15:13       ` Marek Vasut
@ 2010-05-28  7:42         ` Yegor Yefremov
  0 siblings, 0 replies; 3+ messages in thread
From: Yegor Yefremov @ 2010-05-28  7:42 UTC (permalink / raw)
  To: linux-arm-kernel

Marek Vasut schrieb:
> Dne ?t 27. kv?tna 2010 10:15:59 Yegor Yefremov napsal(a):
>> Marek Vasut schrieb:
>>> Dne St 26. kv?tna 2010 15:46:21 Yegor Yefremov napsal(a):
>>>>>     I'm resurrecting an old thread
>>>>>
>>>>> (http://lists.arm.linux.org.uk/lurker/message/20090914.072902.97115112.
>>>>> en .html) about using the two memory banks available
>>>>> on Atmel AT91SAM9G45/M10. I managed to make it work on 2.6.30 by
>>>>> following Russell King advice on how to configure SPARSEMEM.
>>>>>
>>>>>     I submitted a working patch for 2.6.34 here:
>>>>> http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=6143/1
>>>>>
>>>>> The problem is that I'm unsure how to get rid of the #define that
>>>>> forces high_memory value in mm/init.c, should I add a fixup function
>>>>> to board-sam9m10g45ek.c to provide meminfo information ?
>>>> I've already tested the patch on 2.6.33 and it is working properly.
>>>> Concerning high_memory value problem I think the cause is how
>>>> find_node_limits() in arch/arm/m/init.c is implemented. We have two
>>>> memory banks one starting at 0x70000000 and another at 0x200000000. The
>>>> virtual mapping looks like this:
>>>>
>>>> 0x70000000 -> 0xc0000000
>>>> 0x20000000 -> 0xc8000000
>>>>
>>>> However find_node_limits() routine is working with physical addresses so
>>>> the upper limit is 0x70000000 and not 0x20000000 as it should be. As a
>>>> result max_low is pointing to 0x70000000 and that's why only first bank
>>>> will be mapped correctly.
>>>>
>>>> How can find_node_limits() be changed to work with virtual addresses?
>>>>
>>>> Regards,
>>>> Yegor
>>> Hey, try searching for "[PATCH 1/5] pxa/vpac270: Enable SparseMEM for 256
>>> MB of RAM" ... The device has also one memory bank mapped under the
>>> primary one. Maybe that can help. Cheers
>> Marek, I've looked at patch and apart from defining HIGH_MEMORY_VIRT it
>> does the same. Nevertheless if I don't define HIGH_MEMORY_VIRT I get the
>> following crash (I've added debug string showing calculated high_memory.
>> It should be 0xd0000000 and not 0xc8000000):
>>
>> Linux version 2.6.33.2 (OpenRISC at VScom) (gcc version 4.3.2
>> (crosstool-NG-1.3.2) ) #30 Thu May 27 10:06:42 CEST 2010
>> CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
>> CPU: VIVT data cache, VIVT instruction cache
>> Machine: Atmel AT91SAM9G45-EKES
>> Memory policy: ECC disabled, Data cache writeback
>> DBG: high_memory 0xc8000000
>> Clocks: CPU 400 MHz, master 133 MHz, main 12.000 MHz
>> Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 62720
>> Kernel command line: console=ttyS0,115200 root=/dev/mtdblock2 rootwait
>> PID hash table entries: 1024 (order: 0, 4096 bytes)
>> Dentry cache hash table entries: 32768 (order: 5, 131072 bytes)
>> Inode-cache hash table entries: 16384 (order: 4, 65536 bytes)
>> Memory: 128MB 128MB = 256MB total
>> Memory: 255036KB available (3944K code, 303K data, 140K init, 0K highmem)
>> Hierarchical RCU implementation.
>> NR_IRQS:192
>> AT91: 160 gpio irqs in 5 banks
>> Console: colour dummy device 80x30
>> console [ttyS0] enabled
>> Calibrating delay loop... 199.47 BogoMIPS (lpj=997376)
>> Mount-cache hash table entries: 512
>> CPU: Testing write buffer coherency:
>> ------------[ cut here ]------------
>> WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
>> Modules linked in:
>> [<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>]
>> (warn_slowpath_common+0x4c/0x80) [<c0043c34>]
>> (warn_slowpath_common+0x4c/0x80) from [<c008df9c>]
>> (vmap_page_range_noflush+0x128/0x1d8) [<c008df9c>]
>> (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>]
>> (map_vm_area+0x28/0x50) [<c008e074>] (map_vm_area+0x28/0x50) from
>> [<c008e4f8>] (vmap+0x48/0x6c) [<c008e4f8>] (vmap+0x48/0x6c) from
>> [<c000cf60>] (check_writebuffer_bugs+0x5c/0x134) [<c000cf60>]
>> (check_writebuffer_bugs+0x5c/0x134) from [<c0008b9c>]
>> (start_kernel+0x31c/0x388) [<c0008b9c>] (start_kernel+0x31c/0x388) from
>> [<70008034>] (0x70008034) ---[ end trace 1b75b31a2719ed1c ]---
>> ------------[ cut here ]------------
>> WARNING: at mm/vmalloc.c:107 vmap_page_range_noflush+0x128/0x1d8()
>> Modules linked in:
>> [<c0031894>] (unwind_backtrace+0x0/0xdc) from [<c0043c34>]
>> (warn_slowpath_common+0x4c/0x80) [<c0043c34>]
>> (warn_slowpath_common+0x4c/0x80) from [<c008df9c>]
>> (vmap_page_range_noflush+0x128/0x1d8) [<c008df9c>]
>> (vmap_page_range_noflush+0x128/0x1d8) from [<c008e074>]
>> (map_vm_area+0x28/0x50) [<c008e074>] (map_vm_area+0x28/0x50) from
>> [<c008e4f8>] (vmap+0x48/0x6c) [<c008e4f8>] (vmap+0x48/0x6c) from
>> [<c000cf78>] (check_writebuffer_bugs+0x74/0x134) [<c000cf78>]
>> (check_writebuffer_bugs+0x74/0x134) from [<c0008b9c>]
>> (start_kernel+0x31c/0x388) [<c0008b9c>] (start_kernel+0x31c/0x388) from
>> [<70008034>] (0x70008034) ---[ end trace 1b75b31a2719ed1d ]---
>> failed, unable to map memory
>>
>> Any ideas?
>>
>> Yegor
> 
> Do you have CONFIG_HIGHMEM enabled ? If so, why ?

No, I don't. Could you post your bootlog and your .config?

#
# Kernel Features
#
# CONFIG_NO_HZ is not set
# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_PREEMPT_NONE=y
# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
CONFIG_ARCH_SPARSEMEM_ENABLE=y
CONFIG_ARCH_SPARSEMEM_DEFAULT=y
CONFIG_ARCH_SELECT_MEMORY_MODEL=y
# CONFIG_HIGHMEM is not set
CONFIG_SELECT_MEMORY_MODEL=y
# CONFIG_FLATMEM_MANUAL is not set
# CONFIG_DISCONTIGMEM_MANUAL is not set
CONFIG_SPARSEMEM_MANUAL=y
CONFIG_SPARSEMEM=y
CONFIG_HAVE_MEMORY_PRESENT=y
CONFIG_SPARSEMEM_EXTREME=y
CONFIG_SPLIT_PTLOCK_CPUS=999999
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
# CONFIG_LEDS is not set
CONFIG_ALIGNMENT_TRAP=y
# CONFIG_UACCESS_WITH_MEMCPY is not set

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-05-28  7:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <AANLkTin3-rqG2o0t4rbggpCE2cFAV6GWeH0v7UjC1tnQ@mail.gmail.com>
     [not found] ` <4BFD262D.1010308@visionsystems.de>
     [not found]   ` <201005261610.32937.marek.vasut@gmail.com>
2010-05-27  8:15     ` SPARSEMEM support for Atmel AT91SAM9G45 and M10 Yegor Yefremov
2010-05-27 15:13       ` Marek Vasut
2010-05-28  7:42         ` Yegor Yefremov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).