Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 8 Nov 2004 17:44:35 +0900
From:      Pyun YongHyeon <yongari@kt-is.co.kr>
To:        freebsd-sparc64@freebsd.org
Subject:   Executing downloaded micorcode of fxp panics sparc64
Message-ID:  <20041108084435.GA1511@kt-is.co.kr>

next in thread | raw e-mail | index | archive | help

--LZvS9be/3tNcYl/X
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

Hi,

It seems that fxp driver panics sparc64 system when executing
downloaded microcode. The following patch fixes the panic.
It would be appriciated if interested users could apply
the patch, download microcode and try to pass packets on fxp.

Thanks.
-- 
Regards,
Pyun YongHyeon
http://www.kr.freebsd.org/~yongari	|	yongari@freebsd.org

--LZvS9be/3tNcYl/X
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="fxp.patch"

--- if_fxp.c.orig	Mon Sep 20 11:22:43 2004
+++ if_fxp.c	Mon Nov  8 17:35:53 2004
@@ -2624,7 +2624,7 @@
 static u_int32_t fxp_ucode_d102[] = D102_B_RCVBUNDLE_UCODE;
 static u_int32_t fxp_ucode_d102c[] = D102_C_RCVBUNDLE_UCODE;
 
-#define UCODE(x)	x, sizeof(x)
+#define UCODE(x)	x, sizeof(x)/sizeof(u_int32_t)
 
 struct ucode {
 	u_int32_t	revision;
@@ -2651,6 +2651,7 @@
 {
 	struct ucode *uc;
 	struct fxp_cb_ucode *cbp;
+	int i;
 
 	for (uc = ucode_table; uc->ucode != NULL; uc++)
 		if (sc->revision == uc->revision)
@@ -2661,7 +2662,8 @@
 	cbp->cb_status = 0;
 	cbp->cb_command = htole16(FXP_CB_COMMAND_UCODE | FXP_CB_COMMAND_EL);
 	cbp->link_addr = 0xffffffff;    	/* (no) next command */
-	memcpy(cbp->ucode, uc->ucode, uc->length);
+	for (i = 0; i < uc->length; i++)
+		cbp->ucode[i] = htole32(uc->ucode[i]);
 	if (uc->int_delay_offset)
 		*(u_int16_t *)&cbp->ucode[uc->int_delay_offset] =
 		    htole16(sc->tunable_int_delay + sc->tunable_int_delay / 2);

--LZvS9be/3tNcYl/X--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20041108084435.GA1511>