All of lore.kernel.org
 help / color / mirror / Atom feed
From: David Flater <vger@flaterco.com>
To: Alsa Devel <alsa-devel@vger.kernel.org>,
	Linux Kernel <linux-kernel@vger.kernel.org>
Subject: [PATCH] sound: fix emu8000 DRAM sized 512 KiB too small
Date: Mon, 27 Aug 2012 20:30:43 -0400	[thread overview]
Message-ID: <503C1133.7000506@flaterco.com> (raw)

[PATCH] sound: fix emu8000 DRAM sized 512 KiB too small

Applicable to 3.5.3 mainline.

In emu8000.c, size_dram determines the amount of memory on the sound card by
doing write/readback tests starting at 512 KiB and incrementing by 512 KiB.
On success, detected_size is updated to the successful address and testing
continues.  On failure, the loop is immediately exited.  The resulting
detected_size is 512 KiB too small except in two special cases:

1. If there is no memory, the initial 0 value of detected_size is used, which
   is correct.
2. If the address space wraps around, detected_size is updated before the
   bailout, so the result is correct.

The patch corrects all cases and was tested with an AWE64 Gold.  Before:
  EMU8000 [0x620]: 3584 Kb on-board memory detected
  asfxload 4GMGSMT.SF2 (4174814 B) fails.
After:
  EMU8000 [0x620]: 4096 Kb on-board memory detected
  asfxload 4GMGSMT.SF2 succeeds.

C.f. Bug 46451 https://bugzilla.kernel.org/show_bug.cgi?id=46451

Signed-off-by: David Flater <dave@flaterco.com>
---

Note:  I am having newbie problems with git, so I am unable to determine
easily whether this was a regression or a primordial bug.
git clone http://pub/scm/linux/kernel/git/torvalds/linux.git gitkernel
Cloning into gitkernel...
warning: remote HEAD refers to nonexistent ref, unable to checkout.

--- linux-3.5.2/sound/isa/sb/emu8000.c~	2012-08-15 10:55:25.000000000 -0400
+++ linux-3.5.2/sound/isa/sb/emu8000.c	2012-08-25 20:22:00.482446406 -0400
@@ -417,9 +417,6 @@ size_dram(struct snd_emu8000 *emu)
 		EMU8000_SMLD_READ(emu); /* discard stale data  */
 		if (EMU8000_SMLD_READ(emu) != UNIQUE_ID2)
 			break; /* no memory at this address */
-
-		detected_size = size;
-
 		snd_emu8000_read_wait(emu);
 
 		/*
@@ -432,6 +429,9 @@ size_dram(struct snd_emu8000 *emu)
 		if (EMU8000_SMLD_READ(emu) != UNIQUE_ID1)
 			break; /* we must have wrapped around */
 		snd_emu8000_read_wait(emu);
+
+		/* Otherwise, it's valid memory. */
+		detected_size = size + 512 * 1024;
 	}
 
 	/* wait until FULL bit in SMAxW register is false */

             reply	other threads:[~2012-08-28  0:37 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-08-28  0:30 David Flater [this message]
2012-08-28  2:25 ` [PATCHv2] sound: fix emu8000 DRAM sized 512 KiB too small David Flater
2012-08-28 18:01   ` Takashi Iwai
2012-08-28 18:01   ` Takashi Iwai

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=503C1133.7000506@flaterco.com \
    --to=vger@flaterco.com \
    --cc=alsa-devel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.