From patchwork Mon Oct 19 11:58:54 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gong Qianyu X-Patchwork-Id: 532277 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 D18DD1401AF for ; Mon, 19 Oct 2015 23:24:39 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 685774B85B; Mon, 19 Oct 2015 14:23:05 +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 OVelAbmsnqxp; Mon, 19 Oct 2015 14:23:05 +0200 (CEST) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 1F20C4B85E; Mon, 19 Oct 2015 14:22:02 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 1E5D04B6ED for ; Mon, 19 Oct 2015 14:15:17 +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 EbIhTZEmidPE for ; Mon, 19 Oct 2015 14:15:17 +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-by2on0057.outbound.protection.outlook.com [207.46.100.57]) by theia.denx.de (Postfix) with ESMTPS id 2734D4B6E2 for ; Mon, 19 Oct 2015 14:15:14 +0200 (CEST) Received: from BN3PR0301CA0063.namprd03.prod.outlook.com (10.160.152.159) by CY1PR0301MB1275.namprd03.prod.outlook.com (10.161.214.23) with Microsoft SMTP Server (TLS) id 15.1.300.14; Mon, 19 Oct 2015 11:59:11 +0000 Received: from BN1BFFO11FD004.protection.gbl (2a01:111:f400:7c10::1:105) by BN3PR0301CA0063.outlook.office365.com (2a01:111:e400:401e::31) with Microsoft SMTP Server (TLS) id 15.1.300.14 via Frontend Transport; Mon, 19 Oct 2015 11:59:11 +0000 Authentication-Results: spf=none (sender IP is 192.88.168.50) smtp.mailfrom=rhuath.am.freescale.net; lists.denx.de; dkim=none (message not signed) header.d=none;lists.denx.de; dmarc=none action=none header.from=rhuath.am.freescale.net; Received-SPF: None (protection.outlook.com: rhuath.am.freescale.net does not designate permitted sender hosts) Received: from tx30smr01.am.freescale.net (192.88.168.50) by BN1BFFO11FD004.mail.protection.outlook.com (10.58.144.67) with Microsoft SMTP Server (TLS) id 15.1.300.4 via Frontend Transport; Mon, 19 Oct 2015 11:59:11 +0000 Received: from rhuath.am.freescale.net (rhuath.am.freescale.net [10.81.117.101]) by tx30smr01.am.freescale.net (8.14.3/8.14.0) with ESMTP id t9JBxA4W020978; Mon, 19 Oct 2015 04:59:10 -0700 Received: by rhuath.am.freescale.net (Postfix, from userid 65020136) id 1363F2DEBD; Mon, 19 Oct 2015 06:59:10 -0500 (CDT) From: Gong Qianyu To: Date: Mon, 19 Oct 2015 06:58:54 -0500 Message-ID: <1445255949-25021-4-git-send-email-b52263@rhuath.am.freescale.net> X-Mailer: git-send-email 1.6.2.5 In-Reply-To: <1445255949-25021-3-git-send-email-b52263@rhuath.am.freescale.net> References: <1445255949-25021-1-git-send-email-b52263@rhuath.am.freescale.net> <1445255949-25021-2-git-send-email-b52263@rhuath.am.freescale.net> <1445255949-25021-3-git-send-email-b52263@rhuath.am.freescale.net> X-EOPAttributedMessage: 0 X-Matching-Connectors: 130897295513884515; (91ab9b29-cfa4-454e-5278-08d120cd25b8); () X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD004; 1:ikD803PF+B/j1zYy1ry/+A5ajChF+dfPQrZ5nHmPo9ASu/sNbRhK8zHayyXn+LybgVdNRsTDNofdrV24g1gyk3YAXgoXabIW3n7Nl4JMq7SNxku4RvowX0+UpStjvx/Yv6mmGydiQ1SwGKsx0MqYSM20CptGuQ4FOpQUisAkJ9P9Vf+E+8qCgPZATymdnOZ0Mpn0E39pDzZ91YOnCjB+MIFImbrsX89mdJ9ncoATFP27q1gqvvRGe+YnQ8w6pUYNfcnUW0RYp51obpQH0Ycm333X5+telaNX67walPFUpJMrKOzmBqx4QVVK3uZUDoXrQx2aNXefdWuyKYOF98YTvZLygSlU6s2ogXIyPf4qzhLk39DarlpiFJ3EfrsE197RElKhWVXuR4m95pc4g5jRzA== X-Forefront-Antispam-Report: CIP:192.88.168.50; CTRY:US; IPV:NLI; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(428002)(189002)(199003)(5001960100002)(50986999)(48376002)(103686003)(52956003)(6806005)(2351001)(229853001)(105586002)(16796002)(33646002)(46102003)(86362001)(110136002)(107886002)(575784001)(42186005)(5003940100001)(189998001)(106466001)(47776003)(97736004)(45336002)(90966002)(92566002)(64706001)(19580405001)(2950100001)(81156007)(76176999)(19580395003)(11100500001)(101416001)(5007970100001)(50466002)(87936001)(46386002)(5008740100001)(50226001)(42262002)(4001430100001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0301MB1275; H:tx30smr01.am.freescale.net; FPR:; SPF:None; PTR:InfoDomainNonexistent; MX:1; A:0; LANG:en; MIME-Version: 1.0 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1275; 2:+uYPm0l0XI7GNv6x3E1HeoJ8UeRvs6JaCx4Ukhd4UcM9O9NIrAOJRu25p6NpxgspfOZhGM+c11HYbGzuugnJUsTr7Sw/2LawKuG9NB03MWUYR+sOTmCYZl+aRFrB22M8IPF7FixT8zxYwmOH6fJFxBVdlHVqH6KigVWQ92pyHBA=; 3:Wy9yUm7NuMr477dpEo2EUjhEFSil1aPpzyTsiISpLAZNb+U3aan+YTGaSIzf8kOrj0+mEAJlbyym3kg0Y8WB2FepxDerMP7MSrnVXQZUYpONjVdz//bWfIgmahUWVt4r7HMNgiwKFNh5jXAXvVdIe5wzSGAvXZJMTxzFZXndZr1KP0aLMhabkxrGNPMteysZqmB7w7Ezr5nlTfD/0LxotBZIMOMG7EVxGNS7YaotYSA=; 25:DvCtaS7i9IT4TmjuRLq08jw2OBDmWKOUn9NLp2vmjYguQtpvfVIO0q6VpZQT3IY/zJ6oVU07yZN4v10gUOIr+jDZd2CvRDWbeESb4MiVXaCBJ69N/aTN+COSi4UnYjQD9zemOFGS9uupbQB5phJuPe9kEqvbHauO46ixd+0LxDnLZWln9buFCyE0sfFgKHQi9p9MDBV/TehuEAxFrcjwOzmTcU+++/w8vQEMyWoAw0iX3ms+uHz4s/0HQ8BX3QbQXNcA0rnmOhkbTDIvMxxhIw== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0301MB1275; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(101931422205132); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(8121501046)(5005006)(520078)(3002001); SRVR:CY1PR0301MB1275; BCL:0; PCL:0; RULEID:(400006); SRVR:CY1PR0301MB1275; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1275; 4:nFT5PXxHO6TZundIApBcLlrewZWikiSQg2MJo56MUwk0PtOXIEoTKu82NcxI2qEjWdXmbruM2tEb8W4R4fECFsX1jaGjsYNzD+veP/jFqE7U7ezyDwfeZ1zNFq+D/cj5kDUDh9ziqE443VAsQbGCNtFxbrWYYBpt0siBPA1BBlVPXbyPinKJyvdqUC3unn/uFP91pV8vzifyGiWotAeINwYe8sDDG+qubGydU+Fkuqlho2vJGyVod9kHB8gkhw5EF8A8Q8vuO7NLpZl55VcZkJ9fn/VfIqZrxP2Rdk0Q5SeYXcry/ts1C6hif0iAWZe9aKOq8q7G39B8DX9zrwc+yrocEtEhIRRDVh8Aq4qOryM= X-Forefront-PRVS: 07349BFAD2 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0301MB1275; 23:mVL6RcI4OkDUNDv/5OO145ghFhGzbHYkGSY6sMR?= =?us-ascii?Q?kCFqUL+QVm9B9hFwRo/GPj3ipy9ngcacq2eWmkwY2yn/OYeyfzsQglXEZYri?= =?us-ascii?Q?3rDQ8wWAOUZf8CLLALNRKLkw7SOSXkKgEThtuqBDi+rBQoOoJlXP+NI5OttM?= =?us-ascii?Q?g9ha7djLnsfc80mfUpSC3ZQDETYVBG/0WaXHLQlDeNE1/eKd0zE36JljRni0?= =?us-ascii?Q?cEjazZ6NClL6Eu1Xr4tau07ZF/teS7DSYuVk16wXwW02/ERHfmGU3yVYJ+ZH?= =?us-ascii?Q?SctwV0PH7swfIU2DGWofRxe719YpSN/ns6xgzhhktPIPdOMXHrPkhwKO4MHo?= =?us-ascii?Q?1ZnFW/jtceCsoOJq26Dm4i4J4XlRHoUWbnTGZ2wcpmX4nrqFyMEtI3eQWhks?= =?us-ascii?Q?VoU/rRQ7Z3/vsTJe/I3nlVlPXBF8cM4NyFjnEmn8pIDbAF9fshkjAbMMTOqk?= =?us-ascii?Q?nCdm7mzJRyynbzVB90lTxseif3vZWrelyrNCoeWJFUC4UXUzNYzVa+mR8OSd?= =?us-ascii?Q?ByizomsP/59hPCqM+Gepa7uWowe0UYvyBU+RFSuhIKHv6u5vVv2qWAgvnhLZ?= =?us-ascii?Q?1IV3a4/kpmSL+fdcG4LuIioZON9RetwZ2Bg7sz3xwGYzAsDvTqqUnph0M9eJ?= =?us-ascii?Q?eF82heeUNwzO0msH/lyej5qTWJdhi/nX8LdKoYUloDhihil5fY0kvc/KTn2C?= =?us-ascii?Q?an8DXcfJXzMu6s1nr1W+PCoKXplfbwM0czkZ/Pvo00hph9wlXBxxVWPLQaBM?= =?us-ascii?Q?xoPF1X0rVaVg2VW4FP74Ns3bWgyRaXHa9lDOM5lwCtl/GvLHB9DyOhUkwqwN?= =?us-ascii?Q?MdWjRpDZckPdVhtMse6wB4+kHTjkKSfEuWydbKrH/+iCC3UkOu0N3e4nwn8P?= =?us-ascii?Q?e9B4RtvxEZ4DR9rEgCxZmZfpzMAkU6gtxoiLppWV/8LvVaytaK7C6fyfwRiJ?= =?us-ascii?Q?JsjSr1HGX5wE4rKkGBgxSVfcFQFOQ8iyCwXXcOVBho+Jw7ihiTgP7SgwcNLG?= =?us-ascii?Q?+Rqfs6m+ZZp/cUDZ2b/NPnz9V84vo2Iz7f0MYFGUuvZVDZTlO3UPpffPInRz?= =?us-ascii?Q?NqHYJ3/Na42RmBL1Jy3sPEAE5f5qDpvtSrJ3VYRIQeVwNuljoXhdl+DlU4cI?= =?us-ascii?Q?rlXwC7dCbM2Cf9wHbwFdFcVXpyVnClh3VmR/BbOe8Zf4LU6pKsbepKLPcXuV?= =?us-ascii?Q?tBK2skpkftP6nS5N4HChwGRVtdwXtwr9q+RYv/CMFk/pI8HZBOkiRoEaPNQ?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0301MB1275; 5:vkoTodTvAmRWzGutjyp6jNPUCLfQ6+iwG9ygfqngSX4lgXbh6066LCyEpfocu0Hbu6ueqFcBOl/Y0YWALEsKkix0Bp8VZdzDwJVqbSGXwEgnh0ssj/N7cKv72fV+znaURekHm/nMnu+LNpjG1JOzwS0MSz6ZijW+pbH/IaPZVuY=; 24:MrPKS9j4tDASnDO1YDK5htfYy0vmo/dxy8rVmS3TuxORkXyBt1ZdpCGibQ5b74oQRKUObgPq6C5Mak/qkbcjqEGoMUWywvpzbqdK0zHQd7o= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Oct 2015 11:59:11.1232 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e; Ip=[192.88.168.50]; Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0301MB1275 X-Mailman-Approved-At: Mon, 19 Oct 2015 14:21:15 +0200 Cc: B07421@freescale.com, Gong Qianyu , alison.wang@freescale.com, B48286@freescale.com, Wenbin.Song@freescale.com Subject: [U-Boot] [Patch V6 03/18] 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 --- V6: - No change. 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); } }