diff options
author | Florian Fainelli <florian@openwrt.org> | 2007-04-16 09:55:30 +0000 |
---|---|---|
committer | Florian Fainelli <florian@openwrt.org> | 2007-04-16 09:55:30 +0000 |
commit | 151babe684cafa123b416a9785b2a8cef83f6d03 (patch) | |
tree | 9dff66806b8cbfbbdf0b246304d681962f24bb33 /target/linux/adm5120-2.6/files/drivers | |
parent | 0eb7f75195404e45d967be74e560d0da02dadbe2 (diff) | |
download | upstream-151babe684cafa123b416a9785b2a8cef83f6d03.tar.gz upstream-151babe684cafa123b416a9785b2a8cef83f6d03.tar.bz2 upstream-151babe684cafa123b416a9785b2a8cef83f6d03.zip |
Fresh fixes from Gabor Juhos : detects RouterBoot, Bootbase, improve board specification
SVN-Revision: 6963
Diffstat (limited to 'target/linux/adm5120-2.6/files/drivers')
3 files changed, 56 insertions, 61 deletions
diff --git a/target/linux/adm5120-2.6/files/drivers/mtd/maps/adm5120_mtd.c b/target/linux/adm5120-2.6/files/drivers/mtd/maps/adm5120_mtd.c index df506d7fa8..0d95dc833d 100644 --- a/target/linux/adm5120-2.6/files/drivers/mtd/maps/adm5120_mtd.c +++ b/target/linux/adm5120-2.6/files/drivers/mtd/maps/adm5120_mtd.c @@ -3,7 +3,7 @@ * Copyright (C) 2005 Waldemar Brodkorb <wbx@openwrt.org> * Copyright (C) 2004 Florian Schirmer (jolt@tuxbox.org) * - * original functions for finding root filesystem from Mike Baker + * original functions for finding root filesystem from Mike Baker * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the @@ -24,10 +24,10 @@ * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 675 Mass Ave, Cambridge, MA 02139, USA. - * + * * Copyright 2001-2003, Broadcom Corporation * All Rights Reserved. - * + * * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS @@ -57,7 +57,7 @@ extern int parse_myloader_partitions(struct mtd_info *master, struct mtd_partition **pparts, unsigned long origin); -/* Macros for switching flash bank +/* Macros for switching flash bank ADM5120 only support 2MB flash address space so GPIO5 is used as A20 */ @@ -69,7 +69,7 @@ extern int parse_myloader_partitions(struct mtd_info *master, #define TRX_MAGIC 0x30524448 /* "HDR0" */ #define TRX_VERSION 1 #define TRX_MAX_LEN 0x3A0000 -#define TRX_NO_HEADER 1 /* Do not write TRX header */ +#define TRX_NO_HEADER 1 /* Do not write TRX header */ #define TRX_GZ_FILES 0x2 /* Contains up to TRX_MAX_OFFSET individual gzip files */ #define TRX_MAX_OFFSET 3 @@ -150,7 +150,7 @@ static void adm5120_map_copy_from(struct map_info *map, void *to, unsigned long flash_switch_bank(FLASH_BOUNDARY); inline_map_copy_from(map, to, from, len); } - + } static int __init @@ -172,7 +172,7 @@ find_cfe_size(struct mtd_info *mtd, size_t size) memset(buf, 0xe5, sizeof(buf)); /* - * Read into buffer + * Read into buffer */ if (mtd->read(mtd, off, sizeof(buf), &len, buf) || len != sizeof(buf)) @@ -199,7 +199,7 @@ find_cfe_size(struct mtd_info *mtd, size_t size) * Copied from mtdblock.c * * Cache stuff... - * + * * Since typical flash erasable sectors are much larger than what Linux's * buffer cache can handle, we must implement read-modify-write on flash * sectors for each block write requests. To avoid over-erasing flash sectors @@ -213,7 +213,7 @@ static void erase_callback(struct erase_info *done) wake_up(wait_q); } -static int erase_write (struct mtd_info *mtd, unsigned long pos, +static int erase_write (struct mtd_info *mtd, unsigned long pos, int len, const char *buf) { struct erase_info erase; @@ -282,7 +282,7 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) memset(&trx, 0xe5, sizeof(trx)); /* - * Read into buffer + * Read into buffer */ if (mtd->read(mtd, off, sizeof(trx), &len, (char *) &trx) || len != sizeof(trx)) @@ -290,9 +290,9 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) /* found a TRX header */ if (le32_to_cpu(trx.magic) == TRX_MAGIC) { - part->offset = le32_to_cpu(trx.offsets[2]) ? : + part->offset = le32_to_cpu(trx.offsets[2]) ? : le32_to_cpu(trx.offsets[1]); - part->size = le32_to_cpu(trx.len); + part->size = le32_to_cpu(trx.len); part->size -= part->offset; part->offset += off; @@ -309,7 +309,7 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) found: if (part->size == 0) return 0; - + if (mtd->read(mtd, part->offset, sizeof(buf), &len, buf) || len != sizeof(buf)) return 0; @@ -335,7 +335,7 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) if (trx.len != part->offset + part->size - off) { /* Update the trx offsets and length */ trx.len = part->offset + part->size - off; - + /* Update the trx crc32 */ for (i = (u32) &(((struct trx_header *)NULL)->flag_version); i <= trx.len; i += sizeof(buf)) { if (mtd->read(mtd, off + i, sizeof(buf), &len, buf) || len != sizeof(buf)) @@ -351,7 +351,7 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) printk("Error accessing the first trx eraseblock\n"); return 0; } - + printk("Updating TRX offsets and length:\n"); printk("old trx = [0x%08x, 0x%08x, 0x%08x], len=0x%08x crc32=0x%08x\n", trx2->offsets[0], trx2->offsets[1], trx2->offsets[2], trx2->len, trx2->crc32); printk("new trx = [0x%08x, 0x%08x, 0x%08x], len=0x%08x crc32=0x%08x\n", trx.offsets[0], trx.offsets[1], trx.offsets[2], trx.len, trx.crc32); @@ -366,7 +366,7 @@ find_root(struct mtd_info *mtd, size_t size, struct mtd_partition *part) kfree(block); printk("Done\n"); } - + return part->size; } @@ -395,15 +395,15 @@ init_mtd_partitions(struct mtd_info *mtd, size_t size) /* linux (kernel and rootfs) */ if (cfe_size != 384 * 1024) { adm5120_cfe_parts[1].offset = adm5120_cfe_parts[0].size; - adm5120_cfe_parts[1].size = adm5120_cfe_parts[3].offset - + adm5120_cfe_parts[1].size = adm5120_cfe_parts[3].offset - adm5120_cfe_parts[1].offset; } else { /* do not count the elf loader, which is on one block */ - adm5120_cfe_parts[1].offset = adm5120_cfe_parts[0].size + + adm5120_cfe_parts[1].offset = adm5120_cfe_parts[0].size + adm5120_cfe_parts[3].size + mtd->erasesize; - adm5120_cfe_parts[1].size = size - - adm5120_cfe_parts[0].size - - (2*adm5120_cfe_parts[3].size) - + adm5120_cfe_parts[1].size = size - + adm5120_cfe_parts[0].size - + (2*adm5120_cfe_parts[3].size) - mtd->erasesize; } @@ -411,28 +411,28 @@ init_mtd_partitions(struct mtd_info *mtd, size_t size) if (find_root(mtd,size,&adm5120_cfe_parts[2])==0) { /* entirely jffs2 */ adm5120_cfe_parts[4].name = NULL; - adm5120_cfe_parts[2].size = size - adm5120_cfe_parts[2].offset - + adm5120_cfe_parts[2].size = size - adm5120_cfe_parts[2].offset - adm5120_cfe_parts[3].size; } else { /* legacy setup */ /* calculate leftover flash, and assign it to the jffs2 partition */ if (cfe_size != 384 * 1024) { - adm5120_cfe_parts[4].offset = adm5120_cfe_parts[2].offset + + adm5120_cfe_parts[4].offset = adm5120_cfe_parts[2].offset + adm5120_cfe_parts[2].size; if ((adm5120_cfe_parts[4].offset % mtd->erasesize) > 0) { - adm5120_cfe_parts[4].offset += mtd->erasesize - + adm5120_cfe_parts[4].offset += mtd->erasesize - (adm5120_cfe_parts[4].offset % mtd->erasesize); } - adm5120_cfe_parts[4].size = adm5120_cfe_parts[3].offset - + adm5120_cfe_parts[4].size = adm5120_cfe_parts[3].offset - adm5120_cfe_parts[4].offset; } else { - adm5120_cfe_parts[4].offset = adm5120_cfe_parts[2].offset + + adm5120_cfe_parts[4].offset = adm5120_cfe_parts[2].offset + adm5120_cfe_parts[2].size; if ((adm5120_cfe_parts[4].offset % mtd->erasesize) > 0) { - adm5120_cfe_parts[4].offset += mtd->erasesize - + adm5120_cfe_parts[4].offset += mtd->erasesize - (adm5120_cfe_parts[4].offset % mtd->erasesize); } - adm5120_cfe_parts[4].size = size - adm5120_cfe_parts[3].size - + adm5120_cfe_parts[4].size = size - adm5120_cfe_parts[3].size - adm5120_cfe_parts[4].offset; } } @@ -460,7 +460,7 @@ int __init init_adm5120_map(void) adm5120_map.read = adm5120_map_read; adm5120_map.write = adm5120_map_write; adm5120_map.copy_from = adm5120_map_copy_from; - + if (!(adm5120_mtd = do_map_probe("cfi_probe", &adm5120_map))) { printk("Failed to do_map_probe\n"); iounmap((void *)adm5120_map.virt); @@ -475,14 +475,14 @@ int __init init_adm5120_map(void) #ifdef CONFIG_MTD_PARTITIONS - if (adm5120_info.boot_loader == BOOT_LOADER_CFE) + if (adm5120_boot_loader == BOOT_LOADER_CFE) { printk(KERN_NOTICE "adm5120 : using CFE flash mapping\n"); parts = init_mtd_partitions(adm5120_mtd, size); - + for (i = 0; parts[i].name; i++); ret = add_mtd_partitions(adm5120_mtd, parts, i); - + if (ret) { printk(KERN_ERR "Flash: add_mtd_partitions failed\n"); goto fail; @@ -490,11 +490,11 @@ int __init init_adm5120_map(void) } #endif #ifdef CONFIG_MTD_MYLOADER_PARTS - if (adm5120_info.boot_loader == BOOT_LOADER_MYLOADER) + if (adm5120_boot_loader == BOOT_LOADER_MYLOADER) { printk(KERN_NOTICE "adm5120 : using MyLoader flash mapping\n"); char *part_type; - + if (parsed_nr_parts == 0) { ret = parse_myloader_partitions(adm5120_mtd, &parts, 0); diff --git a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c index fb1752b631..1391bbe8c7 100644 --- a/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c +++ b/target/linux/adm5120-2.6/files/drivers/net/adm5120sw.c @@ -3,7 +3,7 @@ * * Copyright Jeroen Vreeken (pe1rxq@amsat.org), 2005 * - * Inspiration for this driver came from the original ADMtek 2.4 + * Inspiration for this driver came from the original ADMtek 2.4 * driver, Copyright ADMtek Inc. */ #include <linux/autoconf.h> @@ -20,7 +20,7 @@ #include <asm/io.h> #include "adm5120sw.h" -#include "adm5120_info.h" +#include <asm/mach-adm5120/adm5120_info.h> MODULE_AUTHOR("Jeroen Vreeken (pe1rxq@amsat.org)"); MODULE_DESCRIPTION("ADM5120 ethernet switch driver"); @@ -29,7 +29,7 @@ MODULE_LICENSE("GPL"); /* * The ADM5120 uses an internal matrix to determine which ports * belong to which VLAN. - * The default generates a VLAN (and device) for each port + * The default generates a VLAN (and device) for each port * (including MII port) and the CPU port is part of all of them. * * Another example, one big switch and everything mapped to eth0: @@ -42,7 +42,7 @@ static unsigned char vlan_matrix[SW_DEVS] = { static int adm5120_nrdevs; static struct net_device *adm5120_devs[SW_DEVS]; -static struct adm5120_dma +static struct adm5120_dma adm5120_dma_txh_v[ADM5120_DMA_TXH] __attribute__((aligned(16))), adm5120_dma_txl_v[ADM5120_DMA_TXL] __attribute__((aligned(16))), adm5120_dma_rxh_v[ADM5120_DMA_RXH] __attribute__((aligned(16))), @@ -389,14 +389,9 @@ static int __init adm5120_sw_init(void) if (err) goto out; - /* MII port? */ - if (adm5120_get_reg(ADM5120_CODE) & ADM5120_CODE_PQFP) + adm5120_nrdevs = adm5120_board.iface_num; + if (adm5120_nrdevs > 5 && !adm5120_has_gmii()) adm5120_nrdevs = 5; - /* CFE based devices only have two enet ports */ - else if (adm5120_info.boot_loader == BOOT_LOADER_CFE) - adm5120_nrdevs = 2; - else - adm5120_nrdevs = 6; adm5120_set_reg(ADM5120_CPUP_CONF, ADM5120_DISCCPUPORT | ADM5120_CRC_PADDING | @@ -426,14 +421,14 @@ static int __init adm5120_sw_init(void) adm5120_set_reg(ADM5120_RECEIVE_LBADDR, KSEG1ADDR(adm5120_dma_rxl)); adm5120_set_vlan(vlan_matrix); - + for (i=0; i<adm5120_nrdevs; i++) { adm5120_devs[i] = alloc_etherdev(sizeof(struct adm5120_sw)); if (!adm5120_devs[i]) { err = -ENOMEM; goto out_int; } - + dev = adm5120_devs[i]; SET_MODULE_OWNER(dev); memset(netdev_priv(dev), 0, sizeof(struct adm5120_sw)); @@ -456,7 +451,7 @@ static int __init adm5120_sw_init(void) memcpy(dev->dev_addr, "\x00\x50\xfc\x11\x22\x01", 6); dev->dev_addr[5] += i; adm5120_write_mac(dev); - + if ((err = register_netdev(dev))) { free_netdev(dev); goto out_int; diff --git a/target/linux/adm5120-2.6/files/drivers/usb/host/adm5120-hcd.c b/target/linux/adm5120-2.6/files/drivers/usb/host/adm5120-hcd.c index 6f0df78c3a..25ba4b8b93 100644 --- a/target/linux/adm5120-2.6/files/drivers/usb/host/adm5120-hcd.c +++ b/target/linux/adm5120-2.6/files/drivers/usb/host/adm5120-hcd.c @@ -3,7 +3,7 @@ * * Copyright (C) 2005 Jeroen Vreeken (pe1rxq@amsat.org) * - * Based on the ADMtek 2.4 driver + * Based on the ADMtek 2.4 driver * (C) Copyright 2003 Junius Chen <juniusc@admtek.com.tw> * Which again was based on the ohci and uhci drivers. */ @@ -146,7 +146,7 @@ static int admhcd_td_err[16] = { struct admhcd { spinlock_t lock; - + void __iomem *addr_reg; void __iomem *data_reg; /* Root hub registers */ @@ -160,7 +160,7 @@ struct admhcd { u32 base; u32 dma_en; unsigned long flags; - + }; static inline struct admhcd *hcd_to_admhcd(struct usb_hcd *hcd) @@ -213,7 +213,7 @@ static struct admhcd_td *admhcd_td_alloc(struct admhcd_ed *ed, struct urb *urb) if (ed->cur == NULL) { ed->cur = tdn; ed->head = tdn; - ed->tail = tdn; + ed->tail = tdn; td = tdn; } else { /* Supply back the old tail and link in new td as tail */ @@ -345,7 +345,7 @@ static irqreturn_t adm5120hcd_irq(int irq, void *ptr, struct pt_regs *regs) } if (intstatus & ADMHCD_INT_TD) { struct admhcd_ed *ed, *head; - + admhcd_reg_set(ahcd, ADMHCD_REG_INTSTATUS, ADMHCD_INT_TD); head = (struct admhcd_ed *)admhcd_reg_get(ahcd, ADMHCD_REG_HOSTHEAD); @@ -355,7 +355,7 @@ static irqreturn_t adm5120hcd_irq(int irq, void *ptr, struct pt_regs *regs) if (ed->urb && !(ed->cur->control & ADMHCD_TD_OWN)) { struct admhcd_td *td; int error; - + td = ed->cur; error = (td->control & ADMHCD_TD_ERRMASK) >> ADMHCD_TD_ERRSHIFT; @@ -442,7 +442,7 @@ static int admhcd_urb_enqueue(struct usb_hcd *hcd, struct usb_host_endpoint *ep, td = admhcd_td_fill(ADMHCD_TD_SETUP | ADMHCD_TD_DATA0, td, (dma_addr_t)urb->setup_packet, 8); while (data_len > 0) { - td = admhcd_td_fill(ADMHCD_TD_DATA1 + td = admhcd_td_fill(ADMHCD_TD_DATA1 | ADMHCD_TD_R | (usb_pipeout(pipe) ? ADMHCD_TD_OUT : ADMHCD_TD_IN), td, @@ -459,7 +459,7 @@ static int admhcd_urb_enqueue(struct usb_hcd *hcd, struct usb_host_endpoint *ep, i = 0; while(data_len > 4096) { td = admhcd_td_fill((usb_pipeout(pipe) ? - ADMHCD_TD_OUT : + ADMHCD_TD_OUT : ADMHCD_TD_IN | ADMHCD_TD_R) | (i ? ADMHCD_TD_TOGGLE : toggle), td, data, 4096); @@ -467,7 +467,7 @@ static int admhcd_urb_enqueue(struct usb_hcd *hcd, struct usb_host_endpoint *ep, data_len -= 4096; i++; } - td = admhcd_td_fill((usb_pipeout(pipe) ? + td = admhcd_td_fill((usb_pipeout(pipe) ? ADMHCD_TD_OUT : ADMHCD_TD_IN) | (i ? ADMHCD_TD_TOGGLE : toggle), td, data, data_len); i++; @@ -616,7 +616,7 @@ static int admhcd_hub_control(struct usb_hcd *hcd, u16 typeReq, u16 wValue, case USB_PORT_FEAT_RESET: if (admhcd_reg_get(ahcd, ADMHCD_REG_PORTSTATUS0 + port*4) & ADMHCD_CCS) { - admhcd_reg_set(ahcd, + admhcd_reg_set(ahcd, ADMHCD_REG_PORTSTATUS0 + port*4, ADMHCD_PRS | ADMHCD_CSC); mdelay(50); @@ -707,7 +707,7 @@ static int __init adm5120hcd_probe(struct platform_device *pdev) struct usb_device *udev; struct resource *addr, *data; void __iomem *addr_reg; - void __iomem *data_reg; + void __iomem *data_reg; int irq, err = 0; if (pdev->num_resources < 3) { @@ -748,7 +748,7 @@ static int __init adm5120hcd_probe(struct platform_device *pdev) err = -ENOMEM; goto out_mem; } - + hcd = usb_create_hcd(&adm5120_hc_driver, &pdev->dev, pdev->dev.bus_id); if (!hcd) @@ -826,7 +826,7 @@ static int __init adm5120hcd_init(void) { if (usb_disabled()) return -ENODEV; - if (!adm5120_info.has_usb) + if (!adm5120_board.has_usb) return -ENODEV; return platform_driver_register(&adm5120hcd_driver); |