Commit 217bbd81 authored by Michael Schmitz's avatar Michael Schmitz Committed by Geert Uytterhoeven

m68k/atari: Reserve some ST-RAM early on for device buffer use

Based on an original patch from Michael Schmitz:

Because mem_init() is now called before device init, devices that rely on
ST-RAM may find all ST-RAM already allocated to other users by the time
device init happens. In particular, a large initrd RAM disk may use up
enough of ST-RAM to cause atari_stram_alloc() to resort to
__get_dma_pages() allocation.

In the current state of Atari memory management, all of RAM is marked
DMA capable, so __get_dma_pages() may well return RAM that is not in actual
fact DMA capable. Using this for frame buffer or SCSI DMA buffer causes
subtle failure.

The ST-RAM allocator has been changed to allocate memory from a pool of
reserved ST-RAM of configurable size, set aside on ST-RAM init (i.e.
before mem_init()). As long as this pool is not exhausted, allocation of
real ST-RAM can be guaranteed.

Other changes:
  - Replace the custom allocator in the ST-RAM pool by the existing allocator
    in the resource subsystem,
  - Remove mem_init_done and its hook, as memory init is now done before
    device init,
  - Remove /proc/stram, as ST-RAM usage now shows up under /proc/iomem, e.g.

	005f2000-006f1fff : ST-RAM Pool
	  005f2000-0063dfff : atafb
	  0063e000-00641fff : ataflop
	  00642000-00642fff : SCSI
Signed-off-by: default avatarMichael Schmitz <schmitz@debian.org>
[Andreas Schwab <schwab@linux-m68k.org>: Use memparse()]
[Geert: Use the resource subsystem instead of a custom allocator]
Signed-off-by: default avatarGeert Uytterhoeven <geert@linux-m68k.org>
parent b7785e95
...@@ -372,12 +372,6 @@ config AMIGA_PCMCIA ...@@ -372,12 +372,6 @@ config AMIGA_PCMCIA
Include support in the kernel for pcmcia on Amiga 1200 and Amiga Include support in the kernel for pcmcia on Amiga 1200 and Amiga
600. If you intend to use pcmcia cards say Y; otherwise say N. 600. If you intend to use pcmcia cards say Y; otherwise say N.
config STRAM_PROC
bool "ST-RAM statistics in /proc"
depends on ATARI
help
Say Y here to report ST-RAM usage statistics in /proc/stram.
config HEARTBEAT config HEARTBEAT
bool "Use power LED as a heartbeat" if AMIGA || APOLLO || ATARI || MAC ||Q40 bool "Use power LED as a heartbeat" if AMIGA || APOLLO || ATARI || MAC ||Q40
default y if !AMIGA && !APOLLO && !ATARI && !MAC && !Q40 && HP300 default y if !AMIGA && !APOLLO && !ATARI && !MAC && !Q40 && HP300
......
This diff is collapsed.
...@@ -6,12 +6,11 @@ ...@@ -6,12 +6,11 @@
*/ */
/* public interface */ /* public interface */
void *atari_stram_alloc(long size, const char *owner); void *atari_stram_alloc(unsigned long size, const char *owner);
void atari_stram_free(void *); void atari_stram_free(void *);
/* functions called internally by other parts of the kernel */ /* functions called internally by other parts of the kernel */
void atari_stram_init(void); void atari_stram_init(void);
void atari_stram_reserve_pages(void *start_mem); void atari_stram_reserve_pages(void *start_mem);
void atari_stram_mem_init_hook (void);
#endif /*_M68K_ATARI_STRAM_H */ #endif /*_M68K_ATARI_STRAM_H */
...@@ -83,11 +83,6 @@ void __init mem_init(void) ...@@ -83,11 +83,6 @@ void __init mem_init(void)
int initpages = 0; int initpages = 0;
int i; int i;
#ifdef CONFIG_ATARI
if (MACH_IS_ATARI)
atari_stram_mem_init_hook();
#endif
/* this will put all memory onto the freelists */ /* this will put all memory onto the freelists */
totalram_pages = num_physpages = 0; totalram_pages = num_physpages = 0;
for_each_online_pgdat(pgdat) { for_each_online_pgdat(pgdat) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment