From: "Mars G. Miro" <marsgmiro@gmail.com>
To: Juergen Lock <qemu-l@jelal.kn-bremen.de>,
Jung-uk Kim <jkim@freebsd.org>,
freebsd-emulation@freebsd.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: ata devices on emulated amd64 on qemu
Date: Tue, 2 Aug 2005 14:53:22 +0800 [thread overview]
Message-ID: <28edec3c0508012353757c7671@mail.gmail.com> (raw)
In-Reply-To: <20050801215410.GA10633@saturn.kn-bremen.de>
On 8/2/05, Juergen Lock <qemu-l@jelal.kn-bremen.de> wrote:
> On Mon, Aug 01, 2005 at 05:30:47PM +0800, Mars G. Miro wrote:
> > On 8/1/05, Mars G. Miro <marsgmiro@gmail.com> wrote:
> > > On 8/1/05, Mars G. Miro <marsgmiro@gmail.com> wrote:
> > > > On 7/30/05, Mars G. Miro <marsgmiro@gmail.com> wrote:
> > > > > On 7/30/05, Jung-uk Kim <jkim@freebsd.org> wrote:
> > > > > > Okay. I finally found a fix. It was actually quite simple.
> Newer
> > > > > > FreeBSD and Linux ATA drivers check whether the PCI ATA controller
> is
> > >
> > > > > > in legacy ATA mode (aka PATA mode). The test failed and it was
> > > > > > treated like a SATA controller. Of course, IRQ failed to map. ;-)
>
> > > > > > Try the attached patch. Tested with FreeBSD/amd64 6.0-BETA1 guest
> on
> > >
> > > > > > FreeBSD/amd64 host.
> > > > > >
> > > > >
> > > > >
> > > > > You rock dude! This patch fixes it. FreeBSD54/amd64 Guest on
> > > > > FreeBSD54/amd64 Host.
> > > > >
> > > > > Any thoughts of including this patch in the ports?
> > > > >
> > > > >
> > > >
> > > >
> > > > Oops. I noticed only now that this time, it's the emulated NE2000 NIC
> > > > that's not detected. This is for a FreeBSD/amd64 guest on
> > > > FreeBSD/amd64 Host.
> > > >
> > >
> > >
> > > Scratch that.
> > >
> > > This is only because there's no ed in the GENERIC kernel for AMD64.
> > >
> >
> > because we dropped support for it?
> >
> > cc -c -O2 -frename-registers -pipe -fno-strict-aliasing -Wall
> > -Wredundant-decls -Wnested-externs -Wstrict-prototypes
> > -Wmissing-prototypes -Wpointer-
> > arith -Winline -Wcast-qual -fformat-extensions -std=c99 -nostdinc
> > -I- -I. -I/usr/src/sys -I/usr/src/sys/contrib/dev/acpica
> > -I/usr/src/sys/contrib/a
> > ltq -I/usr/src/sys/contrib/ipfilter -I/usr/src/sys/contrib/pf
> > -I/usr/src/sys/contrib/dev/ath -I/usr/src/sys/contrib/dev/ath/freebsd
> > -I/usr/src/sys/con
> > trib/ngatm -D_KERNEL -include opt_global.h -fno-common
> > -finline-limit=8000 --param inline-unit-growth=100 --param
> > large-function-growth=1000 -mcmodel
> > =kernel -mno-red-zone -mfpmath=387 -mno-sse -mno-sse2 -mno-mmx
> > -mno-3dnow -msoft-float -fno-asynchronous-unwind-tables
> > -ffreestanding -Werror /usr/
> > src/sys/dev/ed/if_ed.c
> > /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_WD80x3_generic':
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: implicit declaration of
> > function `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:521: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c:532: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c:539: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c:547: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c:570: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_3Com':
> > /usr/src/sys/dev/ed/if_ed.c:905: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > /usr/src/sys/dev/ed/if_ed.c: In function `ed_probe_SIC':
> > /usr/src/sys/dev/ed/if_ed.c:998: warning: nested extern declaration of
> `kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: redundant redeclaration of
> 'kvtop'
> > /usr/src/sys/dev/ed/if_ed.c:508: warning: previous implicit
> > declaration of 'kvtop' was here
> > *** Error code 1
> >
> > ugh :-(
>
> Aha, amd64 doesnt have kvtop anymore. Try the following patch:
> (compiles on i386, it should fix amd64 if you are lucky - as long as
> kvtop is the only problem...)
>
Tried this patch. It does seem to work.
But there are other problems in emulated amd64 --- such as segfaults
here and there --- they seem to occur at random. This is for
{5.4/6.01-Beta} AMD64.
Thanks.
> Index: if_ed.c
> @@ -205,7 +205,7 @@
> int i;
> u_int memsize, maddr;
> u_char iptr, isa16bit, sum, totalsum;
> - u_long conf_maddr, conf_msize, irq, junk;
> + u_long conf_maddr, conf_msize, irq, junk, mphys;
>
> sc->chip_type = ED_CHIP_TYPE_DP8390;
>
> @@ -474,6 +474,7 @@
> return (error);
> }
> sc->mem_start = (caddr_t) rman_get_virtual(sc->mem_res);
> + mphys = rman_get_start(sc->mem_res);
>
> /*
> * allocate one xmit buffer if < 16k, two buffers otherwise
> @@ -505,7 +506,7 @@
> sc->wd_laar_proto = ed_asic_inb(sc, ED_WD_LAAR);
> } else {
> sc->wd_laar_proto = ED_WD_LAAR_L16EN |
> - ((kvtop(sc->mem_start) >> 19) & ED_WD_LAAR_ADDRHI);
> + ((mphys >> 19) & ED_WD_LAAR_ADDRHI);
> }
> /*
> * Enable 16bit access
> @@ -518,7 +519,7 @@
> (sc->type == ED_TYPE_TOSHIBA4) ||
> (sc->type == ED_TYPE_WD8013EBT)) &&
> (sc->chip_type != ED_CHIP_TYPE_WD790)) {
> - sc->wd_laar_proto = (kvtop(sc->mem_start) >> 19) &
> + sc->wd_laar_proto = (mphys >> 19) &
> ED_WD_LAAR_ADDRHI;
> ed_asic_outb(sc, ED_WD_LAAR, sc->wd_laar_proto);
> }
> @@ -530,22 +531,22 @@
> if (sc->chip_type != ED_CHIP_TYPE_WD790) {
> if (ED_FLAGS_GETTYPE(flags) == ED_FLAGS_TOSH_ETHER) {
> ed_asic_outb(sc, ED_WD_MSR + 1,
> - ((kvtop(sc->mem_start) >> 8) & 0xe0) | 4);
> + ((mphys >> 8) & 0xe0) | 4);
> ed_asic_outb(sc, ED_WD_MSR + 2,
> - ((kvtop(sc->mem_start) >> 16) & 0x0f));
> + ((mphys >> 16) & 0x0f));
> ed_asic_outb(sc, ED_WD_MSR,
> ED_WD_MSR_MENB | ED_WD_MSR_POW);
> } else {
> ed_asic_outb(sc, ED_WD_MSR,
> - ((kvtop(sc->mem_start) >> 13) &
> + ((mphys >> 13) &
> ED_WD_MSR_ADDR) | ED_WD_MSR_MENB);
> }
> sc->cr_proto = ED_CR_RD2;
> } else {
> ed_asic_outb(sc, ED_WD_MSR, ED_WD_MSR_MENB);
> ed_asic_outb(sc, ED_WD790_HWR, (ed_asic_inb(sc, ED_WD790_HWR) |
> ED_WD790_HWR_SWH));
> - ed_asic_outb(sc, ED_WD790_RAR, ((kvtop(sc->mem_start) >> 13) & 0x0f) |
> - ((kvtop(sc->mem_start) >> 11) & 0x40) |
> + ed_asic_outb(sc, ED_WD790_RAR, ((mphys >> 13) & 0x0f) |
> + ((mphys >> 11) & 0x40) |
> (ed_asic_inb(sc, ED_WD790_RAR) & 0xb0));
> ed_asic_outb(sc, ED_WD790_HWR, (ed_asic_inb(sc, ED_WD790_HWR) &
> ~ED_WD790_HWR_SWH));
> sc->cr_proto = 0;
> @@ -567,7 +568,7 @@
> for (i = 0; i < memsize; ++i) {
> if (sc->mem_start[i]) {
> device_printf(dev, "failed to clear shared memory at %jx - check
> configuration\n",
> - (uintmax_t)kvtop(sc->mem_start + i));
> + (uintmax_t)mphys + i);
>
> /*
> * Disable 16 bit access to shared memory
> @@ -902,7 +903,7 @@
> for (i = 0; i < memsize; ++i)
> if (sc->mem_start[i]) {
> device_printf(dev, "failed to clear shared memory at %jx - check
> configuration\n",
> - (uintmax_t)kvtop(sc->mem_start + i));
> + (uintmax_t)rman_get_start(sc->mem_res) + i);
> return (ENXIO);
> }
> return (0);
> @@ -995,7 +996,7 @@
> if (sc->mem_start[i]) {
> device_printf(dev, "failed to clear shared memory "
> "at %jx - check configuration\n",
> - (uintmax_t)kvtop(sc->mem_start + i));
> + (uintmax_t)rman_get_start(sc->mem_res) + i);
>
> return (ENXIO);
> }
>
next prev parent reply other threads:[~2005-08-02 7:01 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <28edec3c0507290000415a350d@mail.gmail.com>
[not found] ` <200507291540.52889.jkim@niksun.com>
[not found] ` <200507291647.49230.jkim@niksun.com>
2005-07-30 0:22 ` [Qemu-devel] Re: ata devices on emulated amd64 on qemu Jung-uk Kim
2005-07-30 11:57 ` Mars G. Miro
2005-08-01 2:57 ` Mars G. Miro
2005-08-01 3:30 ` Mars G. Miro
2005-08-01 9:30 ` Mars G. Miro
2005-08-01 21:54 ` Juergen Lock
2005-08-02 6:53 ` Mars G. Miro [this message]
2005-08-02 21:22 ` Juergen Lock
2005-08-02 21:55 ` Jung-uk Kim
2005-08-03 2:07 ` Mars G. Miro
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=28edec3c0508012353757c7671@mail.gmail.com \
--to=marsgmiro@gmail.com \
--cc=freebsd-emulation@freebsd.org \
--cc=jkim@freebsd.org \
--cc=qemu-devel@nongnu.org \
--cc=qemu-l@jelal.kn-bremen.de \
/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.