From 0125779fd4241f5c774c93ebe0ec0774dc5c47f2 Mon Sep 17 00:00:00 2001 From: Russell King Date: Wed, 10 Aug 2005 14:41:45 +0100 Subject: [PATCH] --- yaml --- r: 5762 b: refs/heads/master c: 3c4ee4e2520775896efc6ab850c4c27971fbcf2a h: refs/heads/master v: v3 --- [refs] | 2 +- .../arm/Samsung-S3C24XX/USB-Host.txt | 93 ------------------- trunk/arch/arm/lib/bitops.h | 4 +- trunk/arch/arm/mach-s3c2410/usb-simtec.c | 18 +--- trunk/arch/arm/mm/mm-armv.c | 17 +--- trunk/arch/arm/mm/proc-v6.S | 22 +++-- trunk/drivers/input/gameport/ns558.c | 4 +- trunk/drivers/net/hamradio/6pack.c | 20 +++- trunk/drivers/scsi/dpt_i2o.c | 9 +- trunk/drivers/scsi/scsi_scan.c | 16 +--- trunk/drivers/scsi/scsi_transport_fc.c | 19 ---- trunk/drivers/video/pxafb.c | 8 +- .../asm-arm/arch-s3c2410/usb-control.h | 3 +- trunk/include/asm-arm/pgtable.h | 14 +-- trunk/include/scsi/scsi_transport.h | 8 -- 15 files changed, 52 insertions(+), 205 deletions(-) delete mode 100644 trunk/Documentation/arm/Samsung-S3C24XX/USB-Host.txt diff --git a/[refs] b/[refs] index 0419e91f828c..586b32c1c2a3 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 435d444a532af652ba8bdfd4db4424982bea2f69 +refs/heads/master: 3c4ee4e2520775896efc6ab850c4c27971fbcf2a diff --git a/trunk/Documentation/arm/Samsung-S3C24XX/USB-Host.txt b/trunk/Documentation/arm/Samsung-S3C24XX/USB-Host.txt deleted file mode 100644 index b93b68e2b143..000000000000 --- a/trunk/Documentation/arm/Samsung-S3C24XX/USB-Host.txt +++ /dev/null @@ -1,93 +0,0 @@ - S3C24XX USB Host support - ======================== - - - -Introduction ------------- - - This document details the S3C2410/S3C2440 in-built OHCI USB host support. - -Configuration -------------- - - Enable at least the following kernel options: - - menuconfig: - - Device Drivers ---> - USB support ---> - <*> Support for Host-side USB - <*> OHCI HCD support - - - .config: - CONFIG_USB - CONFIG_USB_OHCI_HCD - - - Once these options are configured, the standard set of USB device - drivers can be configured and used. - - -Board Support -------------- - - The driver attaches to a platform device, which will need to be - added by the board specific support file in linux/arch/arm/mach-s3c2410, - such as mach-bast.c or mach-smdk2410.c - - The platform device's platform_data field is only needed if the - board implements extra power control or over-current monitoring. - - The OHCI driver does not ensure the state of the S3C2410's MISCCTRL - register, so if both ports are to be used for the host, then it is - the board support file's responsibility to ensure that the second - port is configured to be connected to the OHCI core. - - -Platform Data -------------- - - See linux/include/asm-arm/arch-s3c2410/usb-control.h for the - descriptions of the platform device data. An implementation - can be found in linux/arch/arm/mach-s3c2410/usb-simtec.c . - - The `struct s3c2410_hcd_info` contains a pair of functions - that get called to enable over-current detection, and to - control the port power status. - - The ports are numbered 0 and 1. - - power_control: - - Called to enable or disable the power on the port. - - enable_oc: - - Called to enable or disable the over-current monitoring. - This should claim or release the resources being used to - check the power condition on the port, such as an IRQ. - - report_oc: - - The OHCI driver fills this field in for the over-current code - to call when there is a change to the over-current state on - an port. The ports argument is a bitmask of 1 bit per port, - with bit X being 1 for an over-current on port X. - - The function s3c2410_usb_report_oc() has been provided to - ensure this is called correctly. - - port[x]: - - This is struct describes each port, 0 or 1. The platform driver - should set the flags field of each port to S3C_HCDFLG_USED if - the port is enabled. - - - -Document Author ---------------- - -Ben Dooks, (c) 2005 Simtec Electronics diff --git a/trunk/arch/arm/lib/bitops.h b/trunk/arch/arm/lib/bitops.h index 2036ff15bda9..64a988c1ad44 100644 --- a/trunk/arch/arm/lib/bitops.h +++ b/trunk/arch/arm/lib/bitops.h @@ -1,4 +1,6 @@ -#if __LINUX_ARM_ARCH__ >= 6 +#include + +#if __LINUX_ARM_ARCH__ >= 6 && defined(CONFIG_CPU_MPCORE) .macro bitop, instr mov r2, #1 and r3, r0, #7 @ Get bit offset diff --git a/trunk/arch/arm/mach-s3c2410/usb-simtec.c b/trunk/arch/arm/mach-s3c2410/usb-simtec.c index f021fd82be52..7f2b61362976 100644 --- a/trunk/arch/arm/mach-s3c2410/usb-simtec.c +++ b/trunk/arch/arm/mach-s3c2410/usb-simtec.c @@ -1,6 +1,6 @@ /* linux/arch/arm/mach-s3c2410/usb-simtec.c * - * Copyright (c) 2004,2005 Simtec Electronics + * Copyright (c) 2004 Simtec Electronics * Ben Dooks * * http://www.simtec.co.uk/products/EB2410ITX/ @@ -14,8 +14,6 @@ * Modifications: * 14-Sep-2004 BJD Created * 18-Oct-2004 BJD Cleanups, and added code to report OC cleared - * 09-Aug-2005 BJD Renamed s3c2410_report_oc to s3c2410_usb_report_oc - * 09-Aug-2005 BJD Ports powered only if both are enabled */ #define DEBUG @@ -49,19 +47,13 @@ * designed boards. */ -static unsigned int power_state[2]; - static void usb_simtec_powercontrol(int port, int to) { pr_debug("usb_simtec_powercontrol(%d,%d)\n", port, to); - power_state[port] = to; - - if (power_state[0] && power_state[1]) - s3c2410_gpio_setpin(S3C2410_GPB4, 0); - else - s3c2410_gpio_setpin(S3C2410_GPB4, 1); + if (port == 1) + s3c2410_gpio_setpin(S3C2410_GPB4, to ? 0:1); } static irqreturn_t @@ -71,10 +63,10 @@ usb_simtec_ocirq(int irq, void *pw, struct pt_regs *regs) if (s3c2410_gpio_getpin(S3C2410_GPG10) == 0) { pr_debug("usb_simtec: over-current irq (oc detected)\n"); - s3c2410_usb_report_oc(info, 3); + s3c2410_report_oc(info, 3); } else { pr_debug("usb_simtec: over-current irq (oc cleared)\n"); - s3c2410_usb_report_oc(info, 0); + s3c2410_report_oc(info, 0); } return IRQ_HANDLED; diff --git a/trunk/arch/arm/mm/mm-armv.c b/trunk/arch/arm/mm/mm-armv.c index 3c655c54e231..e33fe4229d05 100644 --- a/trunk/arch/arm/mm/mm-armv.c +++ b/trunk/arch/arm/mm/mm-armv.c @@ -383,7 +383,6 @@ static void __init build_mem_type_table(void) { struct cachepolicy *cp; unsigned int cr = get_cr(); - unsigned int user_pgprot; int cpu_arch = cpu_architecture(); int i; @@ -409,9 +408,6 @@ static void __init build_mem_type_table(void) } } - cp = &cache_policies[cachepolicy]; - user_pgprot = cp->pte; - /* * ARMv6 and above have extended page tables. */ @@ -430,19 +426,12 @@ static void __init build_mem_type_table(void) mem_types[MT_MINICLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE; mem_types[MT_CACHECLEAN].prot_sect |= PMD_SECT_APX|PMD_SECT_AP_WRITE; - /* - * Mark the device area as "shared device" - */ mem_types[MT_DEVICE].prot_pte |= L_PTE_BUFFERABLE; mem_types[MT_DEVICE].prot_sect |= PMD_SECT_BUFFERED; - - /* - * User pages need to be mapped with the ASID - * (iow, non-global) - */ - user_pgprot |= L_PTE_ASID; } + cp = &cache_policies[cachepolicy]; + if (cpu_arch >= CPU_ARCH_ARMv5) { mem_types[MT_LOW_VECTORS].prot_pte |= cp->pte & PTE_CACHEABLE; mem_types[MT_HIGH_VECTORS].prot_pte |= cp->pte & PTE_CACHEABLE; @@ -459,7 +448,7 @@ static void __init build_mem_type_table(void) for (i = 0; i < 16; i++) { unsigned long v = pgprot_val(protection_map[i]); - v &= (~(PTE_BUFFERABLE|PTE_CACHEABLE)) | user_pgprot; + v &= (~(PTE_BUFFERABLE|PTE_CACHEABLE)) | cp->pte; protection_map[i] = __pgprot(v); } diff --git a/trunk/arch/arm/mm/proc-v6.S b/trunk/arch/arm/mm/proc-v6.S index 3429ddcf65d1..352db98ee269 100644 --- a/trunk/arch/arm/mm/proc-v6.S +++ b/trunk/arch/arm/mm/proc-v6.S @@ -111,6 +111,12 @@ ENTRY(cpu_v6_switch_mm) mcr p15, 0, r1, c13, c0, 1 @ set context ID mov pc, lr +#define nG (1 << 11) +#define APX (1 << 9) +#define AP1 (1 << 5) +#define AP0 (1 << 4) +#define XN (1 << 0) + /* * cpu_v6_set_pte(ptep, pte) * @@ -133,24 +139,24 @@ ENTRY(cpu_v6_switch_mm) ENTRY(cpu_v6_set_pte) str r1, [r0], #-2048 @ linux version - bic r2, r1, #0x000007f0 + bic r2, r1, #0x00000ff0 bic r2, r2, #0x00000003 - orr r2, r2, #PTE_EXT_AP0 | 2 + orr r2, r2, #AP0 | 2 tst r1, #L_PTE_WRITE tstne r1, #L_PTE_DIRTY - orreq r2, r2, #PTE_EXT_APX + orreq r2, r2, #APX tst r1, #L_PTE_USER - orrne r2, r2, #PTE_EXT_AP1 - tstne r2, #PTE_EXT_APX - bicne r2, r2, #PTE_EXT_APX | PTE_EXT_AP0 + orrne r2, r2, #AP1 | nG + tstne r2, #APX + bicne r2, r2, #APX | AP0 tst r1, #L_PTE_YOUNG - biceq r2, r2, #PTE_EXT_APX | PTE_EXT_AP_MASK + biceq r2, r2, #APX | AP1 | AP0 @ tst r1, #L_PTE_EXEC -@ orreq r2, r2, #PTE_EXT_XN +@ orreq r2, r2, #XN tst r1, #L_PTE_PRESENT moveq r2, #0 diff --git a/trunk/drivers/input/gameport/ns558.c b/trunk/drivers/input/gameport/ns558.c index 70f051894a3c..1ab5f2dc8a2a 100644 --- a/trunk/drivers/input/gameport/ns558.c +++ b/trunk/drivers/input/gameport/ns558.c @@ -275,9 +275,9 @@ static int __init ns558_init(void) static void __exit ns558_exit(void) { - struct ns558 *ns558, *safe; + struct ns558 *ns558; - list_for_each_entry_safe(ns558, safe, &ns558_list, node) { + list_for_each_entry(ns558, &ns558_list, node) { gameport_unregister_port(ns558->gameport); release_region(ns558->io & ~(ns558->size - 1), ns558->size); kfree(ns558); diff --git a/trunk/drivers/net/hamradio/6pack.c b/trunk/drivers/net/hamradio/6pack.c index f9e3be96963c..e44f8e9055ef 100644 --- a/trunk/drivers/net/hamradio/6pack.c +++ b/trunk/drivers/net/hamradio/6pack.c @@ -130,11 +130,12 @@ struct sixpack { #define AX25_6PACK_HEADER_LEN 0 +static void sp_start_tx_timer(struct sixpack *); static void sixpack_decode(struct sixpack *, unsigned char[], int); static int encode_sixpack(unsigned char *, unsigned char *, int, unsigned char); /* - * Perform the persistence/slottime algorithm for CSMA access. If the + * perform the persistence/slottime algorithm for CSMA access. If the * persistence check was successful, write the data to the serial driver. * Note that in case of DAMA operation, the data is not sent here. */ @@ -142,7 +143,7 @@ static int encode_sixpack(unsigned char *, unsigned char *, int, unsigned char); static void sp_xmit_on_air(unsigned long channel) { struct sixpack *sp = (struct sixpack *) channel; - int actual, when = sp->slottime; + int actual; static unsigned char random; random = random * 17 + 41; @@ -158,10 +159,20 @@ static void sp_xmit_on_air(unsigned long channel) sp->tty->driver->write(sp->tty, &sp->led_state, 1); sp->status2 = 0; } else - mod_timer(&sp->tx_t, jiffies + ((when + 1) * HZ) / 100); + sp_start_tx_timer(sp); } /* ----> 6pack timer interrupt handler and friends. <---- */ +static void sp_start_tx_timer(struct sixpack *sp) +{ + int when = sp->slottime; + + del_timer(&sp->tx_t); + sp->tx_t.data = (unsigned long) sp; + sp->tx_t.function = sp_xmit_on_air; + sp->tx_t.expires = jiffies + ((when + 1) * HZ) / 100; + add_timer(&sp->tx_t); +} /* Encapsulate one AX.25 frame and stuff into a TTY queue. */ static void sp_encaps(struct sixpack *sp, unsigned char *icp, int len) @@ -232,7 +243,8 @@ static void sp_encaps(struct sixpack *sp, unsigned char *icp, int len) sp->xleft = count; sp->xhead = sp->xbuff; sp->status2 = count; - sp_xmit_on_air((unsigned long)sp); + if (sp->duplex == 0) + sp_start_tx_timer(sp); } return; diff --git a/trunk/drivers/scsi/dpt_i2o.c b/trunk/drivers/scsi/dpt_i2o.c index 7235f94f1191..e2370529c632 100644 --- a/trunk/drivers/scsi/dpt_i2o.c +++ b/trunk/drivers/scsi/dpt_i2o.c @@ -907,13 +907,9 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev raptorFlag = TRUE; } - if (pci_request_regions(pDev, "dpt_i2o")) { - PERROR("dpti: adpt_config_hba: pci request region failed\n"); - return -EINVAL; - } + base_addr_virt = ioremap(base_addr0_phys,hba_map0_area_size); if (!base_addr_virt) { - pci_release_regions(pDev); PERROR("dpti: adpt_config_hba: io remap failed\n"); return -EINVAL; } @@ -923,7 +919,6 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev if (!msg_addr_virt) { PERROR("dpti: adpt_config_hba: io remap failed on BAR1\n"); iounmap(base_addr_virt); - pci_release_regions(pDev); return -EINVAL; } } else { @@ -937,7 +932,6 @@ static int adpt_install_hba(struct scsi_host_template* sht, struct pci_dev* pDev iounmap(msg_addr_virt); } iounmap(base_addr_virt); - pci_release_regions(pDev); return -ENOMEM; } memset(pHba, 0, sizeof(adpt_hba)); @@ -1033,7 +1027,6 @@ static void adpt_i2o_delete_hba(adpt_hba* pHba) up(&adpt_configuration_lock); iounmap(pHba->base_addr_virt); - pci_release_regions(pHba->pDev); if(pHba->msg_addr_virt != pHba->base_addr_virt){ iounmap(pHba->msg_addr_virt); } diff --git a/trunk/drivers/scsi/scsi_scan.c b/trunk/drivers/scsi/scsi_scan.c index 48edd67982a5..2d3c4ac475f2 100644 --- a/trunk/drivers/scsi/scsi_scan.c +++ b/trunk/drivers/scsi/scsi_scan.c @@ -336,23 +336,9 @@ static struct scsi_target *scsi_alloc_target(struct device *parent, unsigned long flags; const int size = sizeof(struct scsi_target) + shost->transportt->target_size; - struct scsi_target *starget; + struct scsi_target *starget = kmalloc(size, GFP_ATOMIC); struct scsi_target *found_target; - /* - * Obtain the real parent from the transport. The transport - * is allowed to fail (no error) if there is nothing at that - * target id. - */ - if (shost->transportt->target_parent) { - spin_lock_irqsave(shost->host_lock, flags); - parent = shost->transportt->target_parent(shost, channel, id); - spin_unlock_irqrestore(shost->host_lock, flags); - if (!parent) - return NULL; - } - - starget = kmalloc(size, GFP_KERNEL); if (!starget) { printk(KERN_ERR "%s: allocation failure\n", __FUNCTION__); return NULL; diff --git a/trunk/drivers/scsi/scsi_transport_fc.c b/trunk/drivers/scsi/scsi_transport_fc.c index e6412fce423c..35d1c1e8e345 100644 --- a/trunk/drivers/scsi/scsi_transport_fc.c +++ b/trunk/drivers/scsi/scsi_transport_fc.c @@ -1022,23 +1022,6 @@ static int fc_rport_match(struct attribute_container *cont, return &i->rport_attr_cont.ac == cont; } - -/* - * Must be called with shost->host_lock held - */ -static struct device *fc_target_parent(struct Scsi_Host *shost, - int channel, uint id) -{ - struct fc_rport *rport; - - list_for_each_entry(rport, &fc_host_rports(shost), peers) - if ((rport->channel == channel) && - (rport->scsi_target_id == id)) - return &rport->dev; - - return NULL; -} - struct scsi_transport_template * fc_attach_transport(struct fc_function_template *ft) { @@ -1074,8 +1057,6 @@ fc_attach_transport(struct fc_function_template *ft) /* Transport uses the shost workq for scsi scanning */ i->t.create_work_queue = 1; - - i->t.target_parent = fc_target_parent; /* * Setup SCSI Target Attributes. diff --git a/trunk/drivers/video/pxafb.c b/trunk/drivers/video/pxafb.c index 30112816420c..16e37a535d85 100644 --- a/trunk/drivers/video/pxafb.c +++ b/trunk/drivers/video/pxafb.c @@ -717,9 +717,6 @@ static void pxafb_enable_controller(struct pxafb_info *fbi) DPRINTK("reg_lccr2 0x%08x\n", (unsigned int) fbi->reg_lccr2); DPRINTK("reg_lccr3 0x%08x\n", (unsigned int) fbi->reg_lccr3); - /* enable LCD controller clock */ - pxa_set_cken(CKEN16_LCD, 1); - /* Sequence from 11.7.10 */ LCCR3 = fbi->reg_lccr3; LCCR2 = fbi->reg_lccr2; @@ -753,9 +750,6 @@ static void pxafb_disable_controller(struct pxafb_info *fbi) schedule_timeout(20 * HZ / 1000); remove_wait_queue(&fbi->ctrlr_wait, &wait); - - /* disable LCD controller clock */ - pxa_set_cken(CKEN16_LCD, 0); } /* @@ -1305,6 +1299,8 @@ int __init pxafb_probe(struct device *dev) ret = -ENOMEM; goto failed; } + /* enable LCD controller clock */ + pxa_set_cken(CKEN16_LCD, 1); ret = request_irq(IRQ_LCD, pxafb_handle_irq, SA_INTERRUPT, "LCD", fbi); if (ret) { diff --git a/trunk/include/asm-arm/arch-s3c2410/usb-control.h b/trunk/include/asm-arm/arch-s3c2410/usb-control.h index bd43b566db3e..1cc85a096b23 100644 --- a/trunk/include/asm-arm/arch-s3c2410/usb-control.h +++ b/trunk/include/asm-arm/arch-s3c2410/usb-control.h @@ -12,7 +12,6 @@ * Changelog: * 11-Sep-2004 BJD Created file * 21-Sep-2004 BJD Updated port info - * 09-Aug-2005 BJD Renamed s3c2410_report_oc s3c2410_usb_report_oc */ #ifndef __ASM_ARCH_USBCONTROL_H @@ -36,7 +35,7 @@ struct s3c2410_hcd_info { void (*report_oc)(struct s3c2410_hcd_info *, int ports); }; -static void inline s3c2410_usb_report_oc(struct s3c2410_hcd_info *info, int ports) +static void inline s3c2410_report_oc(struct s3c2410_hcd_info *info, int ports) { if (info->report_oc != NULL) { (info->report_oc)(info, ports); diff --git a/trunk/include/asm-arm/pgtable.h b/trunk/include/asm-arm/pgtable.h index 478c49b56e18..a9892eb42a23 100644 --- a/trunk/include/asm-arm/pgtable.h +++ b/trunk/include/asm-arm/pgtable.h @@ -188,18 +188,12 @@ extern void __pgd_error(const char *file, int line, unsigned long val); /* * - extended small page/tiny page */ -#define PTE_EXT_XN (1 << 0) /* v6 */ #define PTE_EXT_AP_MASK (3 << 4) -#define PTE_EXT_AP0 (1 << 4) -#define PTE_EXT_AP1 (2 << 4) #define PTE_EXT_AP_UNO_SRO (0 << 4) -#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0) -#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1) -#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0) +#define PTE_EXT_AP_UNO_SRW (1 << 4) +#define PTE_EXT_AP_URO_SRW (2 << 4) +#define PTE_EXT_AP_URW_SRW (3 << 4) #define PTE_EXT_TEX(x) ((x) << 6) /* v5 */ -#define PTE_EXT_APX (1 << 9) /* v6 */ -#define PTE_EXT_SHARED (1 << 10) /* v6 */ -#define PTE_EXT_NG (1 << 11) /* v6 */ /* * - small page @@ -230,8 +224,6 @@ extern void __pgd_error(const char *file, int line, unsigned long val); #define L_PTE_WRITE (1 << 5) #define L_PTE_EXEC (1 << 6) #define L_PTE_DIRTY (1 << 7) -#define L_PTE_SHARED (1 << 10) /* shared between CPUs (v6) */ -#define L_PTE_ASID (1 << 11) /* non-global (use ASID, v6) */ #ifndef __ASSEMBLY__ diff --git a/trunk/include/scsi/scsi_transport.h b/trunk/include/scsi/scsi_transport.h index f6e0bb484c63..a4f1837a33b1 100644 --- a/trunk/include/scsi/scsi_transport.h +++ b/trunk/include/scsi/scsi_transport.h @@ -29,14 +29,6 @@ struct scsi_transport_template { struct transport_container target_attrs; struct transport_container device_attrs; - /* - * If set, call target_parent prior to allocating a scsi_target, - * so we get the appropriate parent for the target. This function - * is required for transports like FC and iSCSI that do not put the - * scsi_target under scsi_host. - */ - struct device *(*target_parent)(struct Scsi_Host *, int, uint); - /* The size of the specific transport attribute structure (a * space of this size will be left at the end of the * scsi_* structure */