From patchwork Thu Oct 15 13:02:28 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gong Qianyu X-Patchwork-Id: 530668 X-Patchwork-Delegate: yorksun@freescale.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 13BE01402BF for ; Fri, 16 Oct 2015 00:09:54 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id B110E4B669; Thu, 15 Oct 2015 15:09:44 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3NyBEhKkSNjB; Thu, 15 Oct 2015 15:09:44 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id EA4774B6CE; Thu, 15 Oct 2015 15:09:35 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 309884B62A for ; Thu, 15 Oct 2015 15:09:29 +0200 (CEST) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 8EkCdwOoAcNN for ; Thu, 15 Oct 2015 15:09:29 +0200 (CEST) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from na01-by2-obe.outbound.protection.outlook.com (mail-by2on0120.outbound.protection.outlook.com [207.46.100.120]) by theia.denx.de (Postfix) with ESMTPS id 1253A4B67C for ; Thu, 15 Oct 2015 15:09:23 +0200 (CEST) Received: from CH1PR03CA010.namprd03.prod.outlook.com (10.255.156.155) by BLUPR03MB1476.namprd03.prod.outlook.com (10.163.81.18) with Microsoft SMTP Server (TLS) id 15.1.293.16; Thu, 15 Oct 2015 13:09:20 +0000 Received: from BY2FFO11OLC005.protection.gbl (10.255.156.132) by CH1PR03CA010.outlook.office365.com (10.255.156.155) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Thu, 15 Oct 2015 13:09:20 +0000 Authentication-Results: spf=fail (sender IP is 192.88.158.2) smtp.mailfrom=freescale.com; freescale.mail.onmicrosoft.com; dkim=none (message not signed) header.d=none; freescale.mail.onmicrosoft.com; dmarc=none action=none header.from=freescale.com; Received-SPF: Fail (protection.outlook.com: domain of freescale.com does not designate 192.88.158.2 as permitted sender) receiver=protection.outlook.com; client-ip=192.88.158.2; helo=az84smr01.freescale.net; Received: from az84smr01.freescale.net (192.88.158.2) by BY2FFO11OLC005.mail.protection.outlook.com (10.1.14.145) with Microsoft SMTP Server (TLS) id 15.1.293.9 via Frontend Transport; Thu, 15 Oct 2015 13:09:19 +0000 Received: from titan.ap.freescale.net ([10.192.208.233]) by az84smr01.freescale.net (8.14.3/8.14.0) with ESMTP id t9FD95wV032237; Thu, 15 Oct 2015 06:09:16 -0700 From: Gong Qianyu To: Date: Thu, 15 Oct 2015 21:02:28 +0800 Message-ID: <1444914162-34502-4-git-send-email-Qianyu.Gong@freescale.com> X-Mailer: git-send-email 2.1.0.27.g96db324 In-Reply-To: <1444914162-34502-1-git-send-email-Qianyu.Gong@freescale.com> References: <1444914162-34502-1-git-send-email-Qianyu.Gong@freescale.com> X-EOPAttributedMessage: 0 X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC005; 1:mWxImetHtpsIYIRxvb0EiyzR2Ts1wjuEriiHdKNvTwi85ksFL1LPQ7ldhjA9VnHuhBDhprbr9ryT5pVWm9pU+c93Rul8QjurXJG514WmDUHy7AJ9UTTb/IxRMCg6JLmpk4LLYCUk+jVVto8SNGg0uQNXccbGeRWHBgl9EDY1W80lWyJO8lW+UNtsIyjzzvhKRMDGUPxuo2RMggrfP8khUilw27GFobtKtUHiKe3LD/OpxW8TCOI2F5c+eDjLT+cn2dRsPB29C/TOrM8PpYZ7UEbteIYGfq/8XEDbsmibuSnOMqewpyM6kuAD6vzTyCT6OY6bvWEbuSE6B4mDOAe16/gVqxqgGlfe9A0TLrqeyON62/ThmjaAGEMawnsQ5Lj9Xb8MuwzQ1qtG8+Gls2V8Ig== X-Forefront-Antispam-Report: CIP:192.88.158.2; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10019020)(6009001)(2980300002)(1110001)(1109001)(339900001)(199003)(189002)(229853001)(86362001)(77096005)(2950100001)(106466001)(110136002)(5008740100001)(104016004)(69596002)(81156007)(105606002)(19580395003)(575784001)(6806005)(11100500001)(189998001)(76176999)(5001920100001)(5001960100002)(5003940100001)(50986999)(50466002)(48376002)(50226001)(46102003)(97736004)(2351001)(19580405001)(92566002)(85426001)(47776003)(36756003)(107886002)(450100001)(87936001)(5007970100001)(64706001)(4001430100001); DIR:OUT; SFP:1102; SCL:1; SRVR:BLUPR03MB1476; H:az84smr01.freescale.net; FPR:; SPF:Fail; PTR:InfoDomainNonexistent; A:1; MX:1; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB1476; 2:YDskp50S+Cr6hFdI0fn8tTP5IwBopC80Q6MosBUUoRkkhx6FxanpDwz3dOVJaxJPnbnr8SALINP8gYmUf9V5+Hl0ocPwJDizuFdI0GDAgacHr9eMZJXll8FSVSIOGOIczr669yWYmBUSJdalNGoVElXiN9Fx0+toRS6vpEL3V74=; 3:HwZ14eaGHbJ34g7FbktrTTocOG4Kqf6yr/j5abMJulwCO0whVHoMqy0PdHgW077EgC8TXtEJ5DiEMEMtdaC+N9nP2tvrZ77Haj6LyDCurW7ZlQiVZ67WRI9X8925HLQr0eTtHwglmfOsf1SPC5F437ivjji6pkyerMOY1hRJ8cxwP8JHWXZOvSjYs6v3KlGvlmJMpoyCHoGaHz96X/FfQ9h2u2HbRTciR+E1zgA0uuo=; 25:AEi4tap0cONcRTVyPDC6j1r9yk/AoDWumhJBXdRdvWQ6jVo+NpaJeFlr1djDkW9H5rGfU7L4lWNkZ9olrr9z+JGhZy2c84F5FfDxBRhRHIXT3gX9eVeaZKL9ITEvpJaeIGX0EjoTHkiUtXs3g6mxzVvuASiRRdL3mQgVOXJE7+YIxJ1R7LvsdPkc5WN0j8pGV82JuRMV14FEUSIztvYczyozzlQscpaLSs1sZQwG7R9rI1m+cGxZY7jxiO02nmU++aOaOdA0Md12PjkFSbeKRg== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR03MB1476; X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB1476; 20:AOxDuG367fMpgyvehO3XGguyYBemWW99Rfr/69NQ7+Bh+R9VCfeRkUsfPVlCYYfaMc2bHFn7A3byoQP626fD9lZC/A3VlY+34dKwRhKO667Qm92Q2m4TukZmONZ7ITPPeyIKTLuVEk5Xj2CdKK0ieeB0zox+FYidkgsI+alihlargS4pfE8uBxzwBKQaDRNK2aSM6YpCU/SbgTfNAHsd7BgAX5lbpYYzpvn3uxjhr/bmOVy/pUy19tSG+HMkjJ71r256lCIJuaeUOObT9SafQR70Tf4Q6GzELRYBOCYDB/BU7JBs3Wu28ml9Z5hkH8OyeffaXHcEx7PynvRrDJXZrYuw+SczVARkwQQqHO/rY7c=; 4:hCyQwABhE/WG5lAIuhrhGTn+F6wVwPPILhWHt0CFkDTtnmP3cVw74eT8rDyl3eTIpqNpN7QSpL3lYpC4v39m3933uiOD4BpqpWd29XP/5gUka+httcgu3gUxS2JjIubvJDMu37e6TuqDVpDKzZbf4IvldHpkgEoonVdFly3QzVfjK2Kgl/DYs2lWgewszmFe8+r8QKGkZqXktULPwt5tS/IrUQA16VmwDkjVPhcXD2fsS8HRMZaTrwNQqPzpf4NQ035uDmeMzRqLx5uVI9yZE9IyOQNVaKCo16FiOR9lrY/jiNEs4RHPmpvfsZLr7V96AD7zTFmgwcME+/lcr8LDr4FJyA5yCqg1I25AV6pfx7s= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(5005006)(520078)(8121501046)(3002001); SRVR:BLUPR03MB1476; BCL:0; PCL:0; RULEID:; SRVR:BLUPR03MB1476; X-Forefront-PRVS: 0730093765 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR03MB1476; 23:Fr6BJ4hRWhU48OlzLOdUH0oz95HB1Ot6/+92AAyVL?= =?us-ascii?Q?SiYYpU7/XNfKZYSZaWBmMGzTBBcDI/dKIM7kdDQb66cW9pE+W2YNggq7S0NW?= =?us-ascii?Q?TH2HvE2hlyw1/HFZVWZJbtAf1oOvTjU8aHm06pMLg2IRx0631hdU2Imksijy?= =?us-ascii?Q?VgNZGof4a7WbaywwrIVCdQk3DL/Zr5PWKzqDyNxOfBkJ/jY/KnVil2D0zeFo?= =?us-ascii?Q?DlcP8TPTW5tTTuY43nE1G4rdUICInpxX6pvfIQXuAm3P6SAO6O92hQiAMeli?= =?us-ascii?Q?+Kui/r7yrDEPKYLoVgiVkpnYZOjaCdp7CuKWEz+LVgIJV0WEIuV8phEbq8x3?= =?us-ascii?Q?uXC0YMFVefKa7eafu3Dr89PIaU5FgSSR1iNKRoj6BGwLTHTlRyP3/vr0th7O?= =?us-ascii?Q?ozm361z3VWc7B+tdCdEe4tKGVudPftLhu5DGUxl8tttCuCjw9yhskfhkB5fE?= =?us-ascii?Q?CFX/lTf2uSDO0cJQLMmK9puLxCu01diwycZGStQRKsWwPawJcMbDB1O6KIN8?= =?us-ascii?Q?gO8NAvqPrRoYpBe0FKJm8/VWjznBcrfEEt0XjIyWMLV3fd5CehYK4aRloOFh?= =?us-ascii?Q?Hc2JKqUdWh1q5kP5u3/ecKkGc1OTiDpeedoVmJCfu0yzRo2NNemHSqx1GxSU?= =?us-ascii?Q?8JF/sZdDQltqURaA8aqcK93CbBeaUmg1BqZY1Xaesb7mtyZo6oWp81pkMC2t?= =?us-ascii?Q?Xf8CS01n/+2cG5V0WXk1mtMVBHi/oSaCsuUyNKirvgDHd7Iq/emqjFi+O7TK?= =?us-ascii?Q?VQWhaquG2sntXFBa2gqZnXIWe4KqolZT42l9j4Rj84I1NSZw4Hjw7bZFcik9?= =?us-ascii?Q?seg3MuM4eVOLdf91N4W0GuJI26fy0SIJljiAdSyZMK4brAabhSs/K1KzgBuG?= =?us-ascii?Q?lWOXNtfgiKQ0QtW/Kd3pfdIwTl0P0kga0DogSoubMi7X2Cn/Z69v/BNA7ZFM?= =?us-ascii?Q?O+fOT0hxgxQHKEsyjDPbrxNXA6ikx+38e5LOzc2XEHGM28U5Aad6xdOHcu76?= =?us-ascii?Q?0EeJoJFxRsVQAiErTOQNgcKNCnlDnoT6amkSsSlyA1eMArJzkXc1vXs/nF4i?= =?us-ascii?Q?9ChHstOh66RW3LDiUDEHGM8YbVT795F1zE978HDGo/v977k6Ktjrr285UktP?= =?us-ascii?Q?FmtTBj1g8mV/bRQ01Lf50ZY8YJ9DGqCnjMCxU6ox9DZFJEXFqQFzvnipSUWu?= =?us-ascii?Q?lRXaK085Si5H5zm/ze45iUAxKl1c/3y1f1O?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR03MB1476; 5:jW6KNzXKvWojhHyb+y2dPQlRsy2qPrUHbmyviPnVIqKgu0jKmDzmQPyUtMfVOYeB44fwUBt5WdTqx1uEn28WXJ/1JkOWv1rPqZTw0FC5rNzCp5AucgXQvk4R6L45LcEmeYADPnnAXRLsNqImZafkMA==; 24:qAzk5NMqfqS06Qh5Ufw5LfZ8ANWalu7ph+7V36+u/CrY9ZiDSFdErJHa42Ws4OVmyjV9nqqBWRfrE/O4CAGPWXwnVRhvDON/FXBVR/I20fs=; 20:zNzRd+nRKKPRqX2CZGKHq728L176LsT41A4icasH86zEU/Zz+DySm9spXpzmbtCWBCZxCqBcdxQwcLWrTXn6fQ== X-OriginatorOrg: freescale.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Oct 2015 13:09:19.7077 (UTC) X-MS-Exchange-CrossTenant-Id: 710a03f5-10f6-4d38-9ff4-a80b81da590d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=710a03f5-10f6-4d38-9ff4-a80b81da590d; Ip=[192.88.158.2]; Helo=[az84smr01.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BLUPR03MB1476 Cc: B07421@freescale.com, Gong Qianyu , alison.wang@freescale.com, B48286@freescale.com, Wenbin.Song@freescale.com Subject: [U-Boot] [Patch V5 03/17] net/fm: Fix the endian issue to support both endianness platforms X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.15 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" From: Hou Zhiqiang The Frame Manager(FMan) is a big-endian peripheral, so the registers, internal MURAM and BDs, which are allocated in main memory and used to communication between core and FMan, should be accessed in big-endian. The big-endian platforms can access them directly as the code implemented so far, while for the little-endian platforms it need to swap the byte-order. Signed-off-by: Hou Zhiqiang Signed-off-by: Shaohui Xie Signed-off-by: Mingkai Hu Signed-off-by: Gong Qianyu --- V5: - No change. V4: - No change. V3: - Modify the subject to make the aim clear. V2: - No change. drivers/net/fm/eth.c | 70 +++++++++++++++++++++++++++------------------------- drivers/net/fm/fm.c | 11 +++++---- 2 files changed, 43 insertions(+), 38 deletions(-) diff --git a/drivers/net/fm/eth.c b/drivers/net/fm/eth.c index 6702f5a..368d554 100644 --- a/drivers/net/fm/eth.c +++ b/drivers/net/fm/eth.c @@ -109,7 +109,7 @@ static int tgec_is_fibre(struct eth_device *dev) static u16 muram_readw(u16 *addr) { u32 base = (u32)addr & ~0x3; - u32 val32 = *(u32 *)base; + u32 val32 = in_be32((u32 *)base); int byte_pos; u16 ret; @@ -125,7 +125,7 @@ static u16 muram_readw(u16 *addr) static void muram_writew(u16 *addr, u16 val) { u32 base = (u32)addr & ~0x3; - u32 org32 = *(u32 *)base; + u32 org32 = in_be32((u32 *)base); u32 val32; int byte_pos; @@ -135,7 +135,7 @@ static void muram_writew(u16 *addr, u16 val) else val32 = (org32 & 0x0000ffff) | ((u32)val << 16); - *(u32 *)base = val32; + out_be32((u32 *)base, val32); } static void bmi_rx_port_disable(struct fm_bmi_rx_port *rx_port) @@ -213,10 +213,10 @@ static int fm_eth_rx_port_parameter_init(struct fm_eth *fm_eth) pram_page_offset = (u32)pram - fm_muram_base(fm_eth->fm_index); /* enable global mode- snooping data buffers and BDs */ - pram->mode = PRAM_MODE_GLOBAL; + out_be32(&pram->mode, PRAM_MODE_GLOBAL); /* init the Rx queue descriptor pionter */ - pram->rxqd_ptr = pram_page_offset + 0x20; + out_be32(&pram->rxqd_ptr, pram_page_offset + 0x20); /* set the max receive buffer length, power of 2 */ muram_writew(&pram->mrblr, MAX_RXBUF_LOG2); @@ -243,10 +243,11 @@ static int fm_eth_rx_port_parameter_init(struct fm_eth *fm_eth) /* init Rx BDs ring */ rxbd = (struct fm_port_bd *)rx_bd_ring_base; for (i = 0; i < RX_BD_RING_SIZE; i++) { - rxbd->status = RxBD_EMPTY; - rxbd->len = 0; - rxbd->buf_ptr_hi = 0; - rxbd->buf_ptr_lo = (u32)rx_buf_pool + i * MAX_RXBUF_LEN; + muram_writew(&rxbd->status, RxBD_EMPTY); + muram_writew(&rxbd->len, 0); + muram_writew(&rxbd->buf_ptr_hi, 0); + out_be32(&rxbd->buf_ptr_lo, (u32)rx_buf_pool + + i * MAX_RXBUF_LEN); rxbd++; } @@ -254,7 +255,7 @@ static int fm_eth_rx_port_parameter_init(struct fm_eth *fm_eth) rxqd = &pram->rxqd; muram_writew(&rxqd->gen, 0); muram_writew(&rxqd->bd_ring_base_hi, 0); - rxqd->bd_ring_base_lo = (u32)rx_bd_ring_base; + out_be32(&rxqd->bd_ring_base_lo, (u32)rx_bd_ring_base); muram_writew(&rxqd->bd_ring_size, sizeof(struct fm_port_bd) * RX_BD_RING_SIZE); muram_writew(&rxqd->offset_in, 0); @@ -285,10 +286,10 @@ static int fm_eth_tx_port_parameter_init(struct fm_eth *fm_eth) pram_page_offset = (u32)pram - fm_muram_base(fm_eth->fm_index); /* enable global mode- snooping data buffers and BDs */ - pram->mode = PRAM_MODE_GLOBAL; + out_be32(&pram->mode, PRAM_MODE_GLOBAL); /* init the Tx queue descriptor pionter */ - pram->txqd_ptr = pram_page_offset + 0x40; + out_be32(&pram->txqd_ptr, pram_page_offset + 0x40); /* alloc Tx buffer descriptors from main memory */ tx_bd_ring_base = malloc(sizeof(struct fm_port_bd) @@ -304,16 +305,17 @@ static int fm_eth_tx_port_parameter_init(struct fm_eth *fm_eth) /* init Tx BDs ring */ txbd = (struct fm_port_bd *)tx_bd_ring_base; for (i = 0; i < TX_BD_RING_SIZE; i++) { - txbd->status = TxBD_LAST; - txbd->len = 0; - txbd->buf_ptr_hi = 0; - txbd->buf_ptr_lo = 0; + muram_writew(&txbd->status, TxBD_LAST); + muram_writew(&txbd->len, 0); + muram_writew(&txbd->buf_ptr_hi, 0); + out_be32(&txbd->buf_ptr_lo, 0); + txbd++; } /* set the Tx queue decriptor */ txqd = &pram->txqd; muram_writew(&txqd->bd_ring_base_hi, 0); - txqd->bd_ring_base_lo = (u32)tx_bd_ring_base; + out_be32(&txqd->bd_ring_base_lo, (u32)tx_bd_ring_base); muram_writew(&txqd->bd_ring_size, sizeof(struct fm_port_bd) * TX_BD_RING_SIZE); muram_writew(&txqd->offset_in, 0); @@ -368,7 +370,7 @@ static void fmc_tx_port_graceful_stop_enable(struct fm_eth *fm_eth) pram = fm_eth->tx_pram; /* graceful stop transmission of frames */ - pram->mode |= PRAM_MODE_GRACEFUL_STOP; + setbits_be32(&pram->mode, PRAM_MODE_GRACEFUL_STOP); sync(); } @@ -378,7 +380,7 @@ static void fmc_tx_port_graceful_stop_disable(struct fm_eth *fm_eth) pram = fm_eth->tx_pram; /* re-enable transmission of frames */ - pram->mode &= ~PRAM_MODE_GRACEFUL_STOP; + clrbits_be32(&pram->mode, PRAM_MODE_GRACEFUL_STOP); sync(); } @@ -469,19 +471,20 @@ static int fm_eth_send(struct eth_device *dev, void *buf, int len) txbd = fm_eth->cur_txbd; /* find one empty TxBD */ - for (i = 0; txbd->status & TxBD_READY; i++) { + for (i = 0; muram_readw(&txbd->status) & TxBD_READY; i++) { udelay(100); if (i > 0x1000) { - printf("%s: Tx buffer not ready\n", dev->name); + printf("%s: Tx buffer not ready, txbd->status = 0x%x\n", + dev->name, muram_readw(&txbd->status)); return 0; } } /* setup TxBD */ - txbd->buf_ptr_hi = 0; - txbd->buf_ptr_lo = (u32)buf; - txbd->len = len; + muram_writew(&txbd->buf_ptr_hi, 0); + out_be32(&txbd->buf_ptr_lo, (u32)buf); + muram_writew(&txbd->len, len); sync(); - txbd->status = TxBD_READY | TxBD_LAST; + muram_writew(&txbd->status, TxBD_READY | TxBD_LAST); sync(); /* update TxQD, let RISC to send the packet */ @@ -493,10 +496,11 @@ static int fm_eth_send(struct eth_device *dev, void *buf, int len) sync(); /* wait for buffer to be transmitted */ - for (i = 0; txbd->status & TxBD_READY; i++) { + for (i = 0; muram_readw(&txbd->status) & TxBD_READY; i++) { udelay(100); if (i > 0x10000) { - printf("%s: Tx error\n", dev->name); + printf("%s: Tx error, txbd->status = 0x%x\n", + dev->name, muram_readw(&txbd->status)); return 0; } } @@ -525,12 +529,12 @@ static int fm_eth_recv(struct eth_device *dev) fm_eth = (struct fm_eth *)dev->priv; pram = fm_eth->rx_pram; rxbd = fm_eth->cur_rxbd; - status = rxbd->status; + status = muram_readw(&rxbd->status); while (!(status & RxBD_EMPTY)) { if (!(status & RxBD_ERROR)) { - data = (u8 *)rxbd->buf_ptr_lo; - len = rxbd->len; + data = (u8 *)in_be32(&rxbd->buf_ptr_lo); + len = muram_readw(&rxbd->len); net_process_received_packet(data, len); } else { printf("%s: Rx error\n", dev->name); @@ -538,8 +542,8 @@ static int fm_eth_recv(struct eth_device *dev) } /* clear the RxBDs */ - rxbd->status = RxBD_EMPTY; - rxbd->len = 0; + muram_writew(&rxbd->status, RxBD_EMPTY); + muram_writew(&rxbd->len, 0); sync(); /* advance RxBD */ @@ -548,7 +552,7 @@ static int fm_eth_recv(struct eth_device *dev) if (rxbd >= (rxbd_base + RX_BD_RING_SIZE)) rxbd = rxbd_base; /* read next status */ - status = rxbd->status; + status = muram_readw(&rxbd->status); /* update RxQD */ offset_out = muram_readw(&pram->rxqd.offset_out); diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c index 400e9dd..eb0eb3d 100644 --- a/drivers/net/fm/fm.c +++ b/drivers/net/fm/fm.c @@ -80,11 +80,11 @@ static void fm_upload_ucode(int fm_idx, struct fm_imem *imem, out_be32(&imem->iadd, IRAM_IADD_AIE); /* write microcode to IRAM */ for (i = 0; i < size / 4; i++) - out_be32(&imem->idata, ucode[i]); + out_be32(&imem->idata, (be32_to_cpu(ucode[i]))); /* verify if the writing is over */ out_be32(&imem->iadd, 0); - while ((in_be32(&imem->idata) != ucode[0]) && --timeout) + while ((in_be32(&imem->idata) != be32_to_cpu(ucode[0])) && --timeout) ; if (!timeout) printf("Fman%u: microcode upload timeout\n", fm_idx + 1); @@ -177,14 +177,15 @@ static int fman_upload_firmware(int fm_idx, const struct qe_microcode *ucode = &firmware->microcode[i]; /* Upload a microcode if it's present */ - if (ucode->code_offset) { + if (be32_to_cpu(ucode->code_offset)) { u32 ucode_size; u32 *code; printf("Fman%u: Uploading microcode version %u.%u.%u\n", fm_idx + 1, ucode->major, ucode->minor, ucode->revision); - code = (void *)firmware + ucode->code_offset; - ucode_size = sizeof(u32) * ucode->count; + code = (void *)firmware + + be32_to_cpu(ucode->code_offset); + ucode_size = sizeof(u32) * be32_to_cpu(ucode->count); fm_upload_ucode(fm_idx, fm_imem, code, ucode_size); } }