[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#481857: marked as done (r6040-source: Descriptor pointer update broken on big-endian systems)



Your message dated Sun, 14 Sep 2008 22:08:17 +0100
with message-id <1221426497.2955.3.camel@hashbaz.i.decadent.org.uk>
and subject line Re: Bug#481857: r6040-source: Descriptor pointer update broken on big-endian systems
has caused the Debian Bug report #481857,
regarding r6040-source: Descriptor pointer update broken on big-endian systems
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact owner@bugs.debian.org
immediately.)


-- 
481857: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=481857
Debian Bug Tracking System
Contact owner@bugs.debian.org with problems
--- Begin Message ---
Package: r6040-source
Version: 0.17-2
Severity: important
Tags: patch

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

This code in r6040.c is hilariously broken if cpu_to_le32() actually
does byte-swap:

	/* TX and RX descriptor start Register */
	tmp_addr = cpu_to_le32(lp->tx_insert_ptr);
	tmp_addr = virt_to_bus((volatile void *)tmp_addr);
	outw((u16) tmp_addr, ioaddr+0x2c);
	outw(tmp_addr >> 16, ioaddr+0x30);
	tmp_addr = cpu_to_le32(lp->rx_insert_ptr);
	tmp_addr = virt_to_bus((volatile void *)tmp_addr);
	outw((u16) tmp_addr, ioaddr+0x34);
	outw(tmp_addr >> 16, ioaddr+0x38);

The byte-swapping should be the last thing done before writing to
little-endian registers.  The following might work:

	/* TX and RX descriptor start Register */
	tmp_addr = virt_to_bus(lp->tx_insert_ptr);
	outw(cpu_to_le16(tmp_addr), ioaddr+0x2c);
	outw(cpu_to_le16(tmp_addr >> 16), ioaddr+0x30);
	tmp_addr = virt_to_bus(lp->rx_insert_ptr);
	outw(cpu_to_le16(tmp_addr), ioaddr+0x34);
	outw(cpu_to_le16(tmp_addr >> 16), ioaddr+0x38);

Ben.

- -- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'stable'), (100, 'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.24-1-686 (SMP w/1 CPU core)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFIMNnq79ZNCRIGYgcRAilcAJ94ewuRJjT6eh8D6HIQ2rafskCYdgCfW/Hh
iqH56v4EQpxk+ug02ISE4nQ=
=OWWy
-----END PGP SIGNATURE-----



--- End Message ---
--- Begin Message ---
On Sun, 2008-09-14 at 10:46 +0300, Martin Michlmayr wrote:
> reassign 481857 linux-2.6
> thanks
> 
> * Ben Hutchings <ben@decadent.org.uk> [2008-05-19 02:37]:
> > Package: r6040-source
> > Version: 0.17-2
> 
> This package no longer exists: "RoM; superseded by newest linux-source"
> 
> Ben, do you know if this is fixed in 2.6.26?

The driver in 2.6.26 looks quite different, but certainly doesn't
include the erroneous byte-swapping.  In fact no byte-swapping is
necessary in the driver code since outw() takes care of that.

Ben.

Attachment: signature.asc
Description: This is a digitally signed message part


--- End Message ---

Reply to: