Re: [Qemu-devel] Preliminary Malta platform support
Hi, with this patch the latest QEMU from CVS will run a REDBOOT firmware. * The patch includes Aurelien Jarno's latest change for gt64xxx.c. * It adds an new EEPROM 24C01 / 24C02 emulation needed for SDRAM SPD (still incomplete but sufficient for REDBOOT). * It also permits to load firmware images smaller than the maximum BIOS size (code copied from mips_r4k.c). My REDBOOT firmware image for Malta (little endian) can be downloaded here: http://svn.berlios.de/wsvn/ar7-firmware/qemu/trunk/pc-bios/mips_bios.bin?op=file&rev=0&sc=0 Stefan Boot log: $ mipsel-softmmu/qemu-system-mipsel -M malta -L pc-bios /dev/zero -nographic 2>/dev/null (qemu) + FLASH: driver init failed: Driver does not support device IDE failed to identify unit 0 - wrote: a0, read: 20 IDE failed to identify unit 0 - wrote: b0, read: 30 Sorry, FLASH config exceeds available space in FIS directory Ethernet eth0: MAC address 00:00:00:00:00:00 No IP info for device! RedBoot(tm) bootstrap and debug environment [ROM] Non-certified release, version UNKNOWN - built 11:35:22, Dec 27 2006 Platform: Malta (MIPS32 4Kc) Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc. Copyright (C) 2003, 2004, 2005, 2006 eCosCentric Limited RAM: 0x8400-0x8200, [0x8000cc80-0x81ef1000] available FLASH: 0x - 0x1, 0 blocks of 0x bytes each. RedBoot> Index: hw/mips_malta.c === --- hw/mips_malta.c (Revision 421) +++ hw/mips_malta.c (Arbeitskopie) @@ -45,6 +45,7 @@ uint32_t leds; uint32_t brk; uint32_t gpout; +uint32_t i2cin; uint32_t i2coe; uint32_t i2cout; uint32_t i2csel; @@ -85,6 +86,122 @@ qemu_chr_printf(s->display, "\n\n\n\n|\e[31m%-8.8s\e[00m|", s->display_text); } +/* + * EEPROM 24C01 / 24C02 emulation. + * + * Emulation for serial EEPROMs: + * 24C01 - 1024 bit (128 x 8) + * 24C02 - 2048 bit (256 x 8) + * + * Typical device names include Microchip 24C02SC or SGS Thomson ST24C02. + */ + +//~ #define DEBUG + +#if defined(DEBUG) +# define logout(fmt, args...) fprintf(stderr, "MALTA\t%-24s" fmt, __func__, ##args) +#else +# define logout(fmt, args...) ((void)0) +#endif + +struct _eeprom24c0x_t { + uint8_t tick; + uint8_t address; + uint8_t command; + uint8_t ack; + uint8_t scl; + uint8_t sda; + uint16_t size; + uint8_t data; + uint8_t contents[256]; +}; + +typedef struct _eeprom24c0x_t eeprom24c0x_t; + +static eeprom24c0x_t eeprom = { +//~ # Determine Size in Mbit +//~ # SIZE = SDRAM_WIDTH * NUM_DEVICE_BANKS * 2 ^ (NUM_ROW_BITS + NUM_COL_BITS) +//~ 4 * 2 * 2 ^ 8 +contents: { +/* : */ 0x80,0x08,0x04,0x0D,0x0A,0x01,0x40,0x00,0x01,0x75,0x54,0x00,0x82,0x08,0x00,0x01, +//~ /* 0010: */ 0x8F,0x04,0x04,0x01,0x01,0x00,0x0E,0x00,0x00,0x00,0x00,0x14,0x0F,0x14,0x2D,0x40, +/* 0010: */ 0x8F,0x04,0x02,0x01,0x01,0x00,0x0E,0x00,0x00,0x00,0x00,0x14,0x0F,0x14,0x2D,0x40, +/* 0020: */ 0x15,0x08,0x15,0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* 0030: */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x12,0xD0, +/* 0040: */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* 0050: */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* 0060: */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +/* 0070: */ 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x64,0xF4, +}, +}; + +static uint8_t eeprom24c0x_read() +{ +logout("%u: scl = %u, sda = %u, data = 0x%02x\n", +eeprom.tick, eeprom.scl, eeprom.sda, eeprom.data); +return eeprom.sda; +} + +static void eeprom24c0x_write(int scl, int sda) +{ +//~ uint8_t scl = eeprom.scl; +//~ uint8_t sda = eeprom.sda; +if (eeprom.scl && scl && (eeprom.sda != sda)) { +logout("%u: scl = %u->%u, sda = %u->%u i2c %s\n", +eeprom.tick, eeprom.scl, scl, eeprom.sda, sda, sda ? "stop" : "start"); +if (!sda) { +eeprom.tick = 1; +eeprom.command = 0; +} +} else if (eeprom.tick == 0 && !eeprom.ack) { +/* Waiting for start. */ +logout("%u: scl = %u->%u, sda = %u->%u wait for i2c start\n", +eeprom.tick, eeprom.scl, scl, eeprom.sda, sda); +} else if (!eeprom.scl && scl) { +logout("%u: scl = %u->%u, sda = %u->%u trigger bit\n", +eeprom.tick, eeprom.scl, scl, eeprom.sda, sda); +if (eeprom.ack) { +logout("\ti2c ack bit = 0\n"); +sda = 0; +eeprom.ack = 0; +} else if (eeprom.sda == sda) { +uint8_t bit = (sda != 0); +logout("\ti2c bit = %d\n", bit); +if (eeprom.tick < 9) { +eeprom.command <<= 1; +eeprom.command += bit; +eeprom
Re: [Qemu-devel] Preliminary Malta platform support
Stefan Weil wrote: > Aurelien Jarno schrieb: > > Aurelien Jarno a écrit : > >> Hi, > >> > >> I have recently worked on adding support for the Malta platform [1] with > >> a CoreLV CPU in QEMU. Due to lack of time this is currently not > >> finished, but if you want to try, my preliminary patches are now public. > >> It currently only works with a mipsel platform. > >> > >> They are available on http://temp.aurel32.net/ . The patches 1 to 4 > >> correspond to the patches I have just posted. The patch 5 still needs > >> some work, patch 6 is almost ready. See the header of the patches for > >> more information. > >> > > Hello Aurelien, > > merci pour l'emulation de MIPS malta. C'est très jolie. > > I added the MIPS display device which I already published > in an earlier mail, so now Thiemo can see LINUX ON MALTA > scrolling. Maybe the colors need some tuning (is green on > black correct?). The hardware displays red on black, but that's a very minor issue. :-) Thiemo ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
Aurelien Jarno a écrit : > On Thu, Jan 11, 2007 at 08:55:28PM +0100, Stefan Weil wrote: >> Hello Aurelien, > > Hi! > >> merci pour l'emulation de MIPS malta. C'est très jolie. >> >> I added the MIPS display device which I already published >> in an earlier mail, so now Thiemo can see LINUX ON MALTA >> scrolling. Maybe the colors need some tuning (is green on >> black correct?). My console patch (published on the list >> some minutes ago) is also needed for correct display. >> >> The display was tested with the Malta patches and MIPS kernel >> http://temp.aurel32.net/vmlinux-2.6.18.5-mipsel like this: >> >> ./mipsel-softmmu/qemu-system-mipsel -M malta -kernel vmlinux-2.6.18.5-mipsel >> >> Alt-Ctrl-4 or Alt-Ctrl-5 should show the Malta ASCII display. >> > > Thanks for your work. I have just tested it, it works well. I will > include it in the next version of my patches. I would be nice if your > console patch could be merged meanwhile. > I have update my patchset, with your code merged. I have also added a display of the LED bar in the same console. As usual, you can fetch it from http://temp.aurel32.net -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' [EMAIL PROTECTED] | [EMAIL PROTECTED] `-people.debian.org/~aurel32 | www.aurel32.net ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
Alexander Voropay a écrit : > "Stefan Weil" <[EMAIL PROTECTED]> wrote: > >> I added the MIPS display device which I already published >> in an earlier mail, so now Thiemo can see LINUX ON MALTA >> scrolling. > > Linux kernel is scrolling this message *endless* and will waste a > console output. Most of MIPS Malta emulators implement > this device "Malta Display" in the separate small window. > Look for example on the screenshot from the Virtutech Simics > running MIPS Malta Linux: > http://www.nwpi.ru/~alec/mips/simics-malta.jpg I don't see the problem here. You can have a lot of virtual console in QEMU. The Malta platform currently emulates a parallel port and two serial ports, so the malta display is in the fourth position. Even with a video card and the third serial port emulated, that will put it in sixth position, which is IHMO reasonnable. -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' [EMAIL PROTECTED] | [EMAIL PROTECTED] `-people.debian.org/~aurel32 | www.aurel32.net ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
"Stefan Weil" <[EMAIL PROTECTED]> wrote: I added the MIPS display device which I already published in an earlier mail, so now Thiemo can see LINUX ON MALTA scrolling. Linux kernel is scrolling this message *endless* and will waste a console output. Most of MIPS Malta emulators implement this device "Malta Display" in the separate small window. Look for example on the screenshot from the Virtutech Simics running MIPS Malta Linux: http://www.nwpi.ru/~alec/mips/simics-malta.jpg -- -=AV=- ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
On Thu, Jan 11, 2007 at 08:55:28PM +0100, Stefan Weil wrote: > > Hello Aurelien, Hi! > merci pour l'emulation de MIPS malta. C'est très jolie. > > I added the MIPS display device which I already published > in an earlier mail, so now Thiemo can see LINUX ON MALTA > scrolling. Maybe the colors need some tuning (is green on > black correct?). My console patch (published on the list > some minutes ago) is also needed for correct display. > > The display was tested with the Malta patches and MIPS kernel > http://temp.aurel32.net/vmlinux-2.6.18.5-mipsel like this: > > ./mipsel-softmmu/qemu-system-mipsel -M malta -kernel vmlinux-2.6.18.5-mipsel > > Alt-Ctrl-4 or Alt-Ctrl-5 should show the Malta ASCII display. > Thanks for your work. I have just tested it, it works well. I will include it in the next version of my patches. I would be nice if your console patch could be merged meanwhile. About the color I don't know as I don't own such a board. I guess Thiemo knows the answer. Tschüss, AUrelien -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' [EMAIL PROTECTED] | [EMAIL PROTECTED] `-people.debian.org/~aurel32 | www.aurel32.net ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
Aurelien Jarno schrieb: > Aurelien Jarno a écrit : >> Hi, >> >> I have recently worked on adding support for the Malta platform [1] with >> a CoreLV CPU in QEMU. Due to lack of time this is currently not >> finished, but if you want to try, my preliminary patches are now public. >> It currently only works with a mipsel platform. >> >> They are available on http://temp.aurel32.net/ . The patches 1 to 4 >> correspond to the patches I have just posted. The patch 5 still needs >> some work, patch 6 is almost ready. See the header of the patches for >> more information. >> Hello Aurelien, merci pour l'emulation de MIPS malta. C'est très jolie. I added the MIPS display device which I already published in an earlier mail, so now Thiemo can see LINUX ON MALTA scrolling. Maybe the colors need some tuning (is green on black correct?). My console patch (published on the list some minutes ago) is also needed for correct display. The display was tested with the Malta patches and MIPS kernel http://temp.aurel32.net/vmlinux-2.6.18.5-mipsel like this: ./mipsel-softmmu/qemu-system-mipsel -M malta -kernel vmlinux-2.6.18.5-mipsel Alt-Ctrl-4 or Alt-Ctrl-5 should show the Malta ASCII display. Regards Stefan Index: vl.h === RCS file: /sources/qemu/qemu/vl.h,v retrieving revision 1.170 diff -u -b -B -u -r1.170 vl.h --- vl.h10 Jan 2007 16:25:04 -1.170 +++ vl.h11 Jan 2007 19:33:10 - @@ -302,6 +302,7 @@ QEMUBH *bh; } CharDriverState; +CharDriverState *qemu_chr_open(const char *filename); void qemu_chr_printf(CharDriverState *s, const char *fmt, ...); int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len); void qemu_chr_send_event(CharDriverState *s, int event); --- hw/mips_malta.c2007-01-11 20:34:59.0 +0100 +++ hw/mips_malta.c2007-01-10 19:16:44.0 +0100 @@ -64,6 +64,26 @@ } } +/* MIPS ASCII display */ +#define ASCII_DISPLAY_POS_BASE 0x1f000418 +static char mips_display_text[8]; +static CharDriverState *mips_display; +static void malta_display_writel(target_phys_addr_t addr, uint32_t val) +{ +if (mips_display == 0) { +mips_display = qemu_chr_open("vc"); +qemu_chr_printf(mips_display, "\e[HMIPS Display\r\n"); +qemu_chr_printf(mips_display, "++\r\n"); +qemu_chr_printf(mips_display, "++\r\n"); +qemu_chr_printf(mips_display, "++\r\n"); +} +if (addr >= ASCII_DISPLAY_POS_BASE && addr < ASCII_DISPLAY_POS_BASE + 4 * 2 * 8) { +unsigned index = (addr - ASCII_DISPLAY_POS_BASE) / 4 / 2; +mips_display_text[index] = (char)val; +qemu_chr_printf(mips_display, "\e[H\n\n|\e[32m%-8.8s\e[00m|", mips_display_text); +} +} + /* Malta FPGA */ static uint32_t malta_fpga_readl(void *opaque, target_phys_addr_t addr) { @@ -168,7 +188,7 @@ break; /* ASCIIWORD, ASCIIPOS0 to ASCIIPOS7 Registers */ -/* XXX: implement a 8-character ASCII display */ +/* 8-character ASCII display */ case 0x000410: case 0x000418: case 0x000420: @@ -178,6 +198,7 @@ case 0x000440: case 0x000448: case 0x000450: +malta_display_writel(addr, val); break; /* SOFTRES Register */ ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel
Re: [Qemu-devel] Preliminary Malta platform support
Aurelien Jarno a écrit : > Hi, > > I have recently worked on adding support for the Malta platform [1] with > a CoreLV CPU in QEMU. Due to lack of time this is currently not > finished, but if you want to try, my preliminary patches are now public. > It currently only works with a mipsel platform. > > They are available on http://temp.aurel32.net/ . The patches 1 to 4 > correspond to the patches I have just posted. The patch 5 still needs > some work, patch 6 is almost ready. See the header of the patches for > more information. > There was a bug in the PCI IRQ routing, which caused the network to not work correctly. This is now fixed, the patches are at the same locations. -- .''`. Aurelien Jarno | GPG: 1024D/F1BCDB73 : :' : Debian developer | Electrical Engineer `. `' [EMAIL PROTECTED] | [EMAIL PROTECTED] `-people.debian.org/~aurel32 | www.aurel32.net ___ Qemu-devel mailing list Qemu-devel@nongnu.org http://lists.nongnu.org/mailman/listinfo/qemu-devel