Re: [Qemu-devel] Preliminary Malta platform support

2007-03-25 Thread Stefan Weil
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

2007-01-15 Thread Thiemo Seufer
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

2007-01-14 Thread Aurelien Jarno
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

2007-01-14 Thread Aurelien Jarno
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

2007-01-12 Thread Alexander Voropay

"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

2007-01-11 Thread Aurelien Jarno
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

2007-01-11 Thread Stefan Weil
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

2007-01-09 Thread Aurelien Jarno
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