05 Jan, 2012

3 commits

  • To debug different UARTs at different baud-rates connected to the WiLink
    connectivity combo-chipset, this patch enables the debugging code so that upon
    boot different UARTs at different baud-rates can be tried out to verify the
    interface with WiLink.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Upon failure to read firmware version from chip or upon failure in responses
    to firmware download the UART needs to be flushed of its existing buffers so
    that the UIM can restart UART properly.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Concurrent access to UART2/combo-interface by multiple protocol drivers such
    as BT, FM and GPS caused issues during firmware download failure cases or
    cases when the firmware download took longer than usual.

    This was because of un-safe access to protos_registered & st_states.
    Protecting this will also make the registration complete callback un-safe for
    sleep.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

01 Nov, 2011

1 commit


23 Aug, 2011

8 commits

  • If suppose the UIM were to die and hence UART were to close when the
    Bluetooth/FM or GPS is turned on, prep the ST for a state where-in if
    the UIM comes back up, Bluetooth/FM/GPS can be turned on.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • If during validation of the firmware download the data doesn't match what is
    expected out of the chip, this calls for a firmware download failure and a
    retry.
    Free the SKB which collects response during such scenarios.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • When the line discipline install fails for reasons such as missing user-space
    UIM or broken communication between UIM and ST driver, then the ST
    attempts/retries to request for ldisc installation again.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • download firmware behaves differently at different times, when logs are
    enabled and the system is loaded, the wait_for_completion is able to wait for
    every send, However during other times the wait does not happen.

    So, for reliability reinitializing the completion before every send, makes
    sure the wait happens for every send.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Texas Instrument's shared transport driver interpret incoming data from the
    UART based on the various protocol drivers registered to the driver such as
    btwilink driver or FM or GPS driver which provide logical channel IDs.

    In case of bad-behavior from chip such as HCI Event response for a GPS command
    or a HCI Event (h/w error event) for a FM response & In case of bad-behavior
    from UART driver such as dropping data bytes a fail-safe is required to avoid
    kernel panic.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Vijay Badawadagi
    Signed-off-by: Greg Kroah-Hartman

    Vijay Badawadagi
     
  • After the version information has been read, the completion which assists in
    wait_for_completion during the firmware send/wait sequence is being re-used
    and hence this needs to be re-initialised for fool proof firmware download
    retries.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Certain platform specific or Host-WiLink Interface specific actions would be
    required to be taken when the chip is being enabled and after the chip is
    disabled such as configuration of the mux modes for the GPIO of host connected
    to the nshutdown of the chip or relinquishing UART after the chip is disabled.

    Similar actions can also be taken when the chip is in deep sleep or when the
    chip is awake. Performance enhancements such as configuring the host to run
    faster when chip is awake and slower when chip is asleep can also be made
    here.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Previously the private data of each protocol registered to use ST was
    used to determine whether the protocol was registered to use shared
    transport or otherwise.
    However, now a flag is_registered is maintained to identify whether a
    protocol intends to use ST.
    Upon closing of the UART the error message relevant to this lack of
    un-registration was misleading and this patch fixes that.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

08 Jun, 2011

2 commits

  • Before the incrementing of ptr in skip_change_remote_baud,
    it points to cur_action, but the increment is done by
    the size of nxt_action instead. This could cause ptr
    to not point to a bts_action structure, which is
    harmful for the increment of ptr done in download_firmware.
    Therefore, the skipping is first done for cur_action.

    Signed-off-by: Shahar Lev
    Signed-off-by: Greg Kroah-Hartman

    Shahar Lev
     
  • Running ktest.pl, I hit this bug:

    [ 19.780654] BUG: unable to handle kernel NULL pointer dereference at 0000000c
    [ 19.780660] IP: [] dev_get_drvdata+0xc/0x46
    [ 19.780669] *pdpt = 0000000031daf001 *pde = 0000000000000000
    [ 19.780673] Oops: 0000 [#1] SMP
    [ 19.780680] Dumping ftrace buffer:^M
    [ 19.780685] (ftrace buffer empty)
    [ 19.780687] Modules linked in: ide_pci_generic firewire_ohci firewire_core evbug crc_itu_t e1000 ide_core i2c_i801 iTCO_wdt
    [ 19.780697]
    [ 19.780700] Pid: 346, comm: v4l_id Not tainted 2.6.39-test-02740-gcaebc16-dirty #4 /DG965MQ
    [ 19.780706] EIP: 0060:[] EFLAGS: 00010202 CPU: 0
    [ 19.780709] EIP is at dev_get_drvdata+0xc/0x46
    [ 19.780712] EAX: 00000008 EBX: f1e37da4 ECX: 00000000 EDX: 00000000
    [ 19.780715] ESI: f1c3f200 EDI: c33ec95c EBP: f1e37d80 ESP: f1e37d80
    [ 19.780718] DS: 007b ES: 007b FS: 00d8 GS: 00e0 SS: 0068
    [ 19.780721] Process v4l_id (pid: 346, ti=f1e36000 task=f2bc2a60 task.ti=f1e36000)
    [ 19.780723] Stack:
    [ 19.780725] f1e37d8c c117d395 c33ec93c f1e37db4 c117a0f9 00000002 00000000 c1725e54
    [ 19.780732] 00000001 00000007 f2918c90 f1c3f200 c33ec95c f1e37dd4 c1789d3d 22222222
    [ 19.780740] 22222222 22222222 f2918c90 f1c3f200 f29194f4 f1e37de8 c178d5c4 c1725e54
    [ 19.780747] Call Trace:
    [ 19.780752] [] st_kim_ref+0x28/0x41
    [ 19.780756] [] st_register+0x29/0x562
    [ 19.780761] [] ? v4l2_open+0x111/0x1e3
    [ 19.780766] [] fmc_prepare+0x97/0x424
    [ 19.780770] [] fm_v4l2_fops_open+0x70/0x106
    [ 19.780773] [] ? v4l2_open+0x111/0x1e3
    [ 19.780777] [] v4l2_open+0x158/0x1e3
    [ 19.780782] [] chrdev_open+0x22c/0x276
    [ 19.780787] [] __dentry_open+0x35c/0x581
    [ 19.780792] [] nameidata_to_filp+0x7c/0x96
    [ 19.780795] [] ? cdev_put+0x57/0x57
    [ 19.780800] [] do_last+0x743/0x9d4
    [ 19.780804] [] ? path_init+0x1ee/0x596
    [ 19.780808] [] path_openat+0x10c/0x597
    [ 19.780813] [] ? trace_hardirqs_off+0x27/0x37
    [ 19.780817] [] ? local_clock+0x78/0xc7
    [ 19.780821] [] do_filp_open+0x39/0xc2
    [ 19.780827] [] ? _raw_spin_unlock+0x4c/0x5d^M
    [ 19.780831] [] ? alloc_fd+0x19e/0x1b7
    [ 19.780836] [] do_sys_open+0xb7/0x1bd
    [ 19.780840] [] ? sys_munmap+0x78/0x8d
    [ 19.780844] [] sys_open+0x36/0x58
    [ 19.780849] [] sysenter_do_call+0x12/0x38
    [ 19.780852] Code: d8 2f 20 c3 01 83 15 dc 2f 20 c3 00 f0 ff 00 83 05 e0 2f 20 c3 01 83 15 e4 2f 20 c3 00 5d c3 55 89 e5 3e 8d 74 26 00 85 c0 74 28 40 04 83 05 e8 2f 20 c3 01 83 15 ec 2f 20 c3 00 85 c0 74 13 ^M
    [ 19.780889] EIP: [] dev_get_drvdata+0xc/0x46 SS:ESP 0068:f1e37d80
    [ 19.780894] CR2: 000000000000000c
    [ 19.780898] ---[ end trace e7d1d0f6a2d1d390 ]---

    The id of 0 passed to st_kim_ref() found no device, keeping pdev null,
    and causing pdev->dev cause a NULL pointer dereference. After having
    st_kim_ref() check for NULL, the st_unregister() function needed to be
    updated to handle the case that st_gdata was not set by the
    st_kim_ref().

    Signed-off-by: Steven Rostedt
    Signed-off-by: Greg Kroah-Hartman

    Steven Rostedt
     

04 Jun, 2011

1 commit

  • This reverts commit b1c43f82c5aa265442f82dba31ce985ebb7aa71c.

    It was broken in so many ways, and results in random odd pty issues.

    It re-introduced the buggy schedule_work() in flush_to_ldisc() that can
    cause endless work-loops (see commit a5660b41af6a: "tty: fix endless
    work loop when the buffer fills up").

    It also used an "unsigned int" return value fo the ->receive_buf()
    function, but then made multiple functions return a negative error code,
    and didn't actually check for the error in the caller.

    And it didn't actually work at all. BenH bisected down odd tty behavior
    to it:
    "It looks like the patch is causing some major malfunctions of the X
    server for me, possibly related to PTYs. For example, cat'ing a
    large file in a gnome terminal hangs the kernel for -minutes- in a
    loop of what looks like flush_to_ldisc/workqueue code, (some ftrace
    data in the quoted bits further down).

    ...

    Some more data: It -looks- like what happens is that the
    flush_to_ldisc work queue entry constantly re-queues itself (because
    the PTY is full ?) and the workqueue thread will basically loop
    forver calling it without ever scheduling, thus starving the consumer
    process that could have emptied the PTY."

    which is pretty much exactly the problem we fixed in a5660b41af6a.

    Milton Miller pointed out the 'unsigned int' issue.

    Reported-by: Benjamin Herrenschmidt
    Reported-by: Milton Miller
    Cc: Stefan Bigler
    Cc: Toby Gray
    Cc: Felipe Balbi
    Cc: Greg Kroah-Hartman
    Cc: Alan Cox
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     

24 May, 2011

1 commit

  • * 'tty-next' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty-2.6: (48 commits)
    serial: 8250_pci: add support for Cronyx Omega PCI multiserial board.
    tty/serial: Fix break handling for PORT_TEGRA
    tty/serial: Add explicit PORT_TEGRA type
    n_tracerouter and n_tracesink ldisc additions.
    Intel PTI implementaiton of MIPI 1149.7.
    Kernel documentation for the PTI feature.
    export kernel call get_task_comm().
    tty: Remove to support serial for S5P6442
    pch_phub: Support new device ML7223
    8250_pci: Add support for the Digi/IBM PCIe 2-port Adapter
    ASoC: Update cx20442 for TTY API change
    pch_uart: Support new device ML7223 IOH
    parport: Use request_muxed_region for IT87 probe and lock
    tty/serial: add support for Xilinx PS UART
    n_gsm: Use print_hex_dump_bytes
    drivers/tty/moxa.c: Put correct tty value
    TTY: tty_io, annotate locking functions
    TTY: serial_core, remove superfluous set_task_state
    TTY: serial_core, remove invalid test
    Char: moxa, fix locking in moxa_write
    ...

    Fix up trivial conflicts in drivers/bluetooth/hci_ldisc.c and
    drivers/tty/serial/Makefile.

    I did the hci_ldisc thing as an evil merge, cleaning things up.

    Linus Torvalds
     

30 Apr, 2011

1 commit

  • st_drv uses skb*() interfaces, so it should depend on NET.
    It also uses GPIO interfaces, so it should depend on GPIOLIB.

    st_kim.c uses syss_*() calls, so it should #include
    .

    Fixes these observed build errors:
    ERROR: "skb_queue_purge" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "skb_pull" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "skb_queue_tail" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "__alloc_skb" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "kfree_skb" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "skb_dequeue" [drivers/misc/ti-st/st_drv.ko] undefined!
    ERROR: "skb_put" [drivers/misc/ti-st/st_drv.ko] undefined!

    Signed-off-by: Randy Dunlap
    Cc: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Randy Dunlap
     

23 Apr, 2011

3 commits

  • it makes it simpler to keep track of the amount of
    bytes received and simplifies how flush_to_ldisc counts
    the remaining bytes. It also fixes a bug of lost bytes
    on n_tty when flushing too many bytes via the USB
    serial gadget driver.

    Tested-by: Stefan Bigler
    Tested-by: Toby Gray
    Signed-off-by: Felipe Balbi
    Signed-off-by: Greg Kroah-Hartman

    Felipe Balbi
     
  • rfkill is no longer used by Texas Instruments shared transport driver to
    communicate with user-space.
    This patch removes the dependency of rfkill to be enabled to build
    shared transport driver in the Kconfig.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • When certain technologies shutdown their interface without waiting for
    the acknowledgement from the chip. The receive_buf from the TTY would be
    invoked a while after the relevant technology is unregistered.

    This patch introduces a new flag "is_registered" which maintains the
    state of protocols BT, FM or GPS and thereby removes the need to clear
    the protocol data from ST when protocols gets unregistered.

    This fixes corner cases when HCI RESET is sent down from bluetooth stack
    and the receive_buf is called from tty after 250ms before which
    bluetooth would have unregistered from the system.
    OR - when FM application decides to close down the device without
    sending a power-off FM command resulting in some RDS data or interrupt
    data coming in after the driver is unregistered.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

31 Mar, 2011

1 commit


10 Mar, 2011

1 commit

  • debug code in TI-ST driver can be enabled by #defining
    DEBUG in the first line of the code and in case debugfs
    is mounted, the 2 entries in /sys/kernel/debug/ti-st/ will
    also provide useful information.
    These 2 were broken because of the recent changes to the parsing
    logic and the registration mechanism of the protocol drivers,
    this patch fixes them.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

05 Feb, 2011

7 commits

  • TI shared transport driver previously intended to expose rfkill
    entries for each of the protocol gpio that the chip would have.
    However now in case such gpios exist, which requires to be enabled
    for a specific protocol, the responsibility lay on protocol driver.
    This patch removes the request/free of multiple gpios, rfkill struct
    references and also removes the chip_toggle function.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • Where file-transfer stops/pauses in between, is
    result of a HCI-LL anamoly in ST LL driver.
    ST LL did not copy the contents of WaitQ into the TxQ, when a WAKEUP_IND
    collision happened.
    Make also sure, that the copying mechanism is safe, by wrapping it around
    spin locks inside st_int_recv().
    This was easily reproduced when the sleep timeout was reduced to 100ms
    for HCI-LL.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • To fasten the process of firmware download, the chip allows
    disabling of the command complete event generation from host.
    In these cases, only few very essential commands would have
    the command complete events and hence the wait associated with
    them.

    So now the driver would wait for a command complete event, only
    when it comes across a wait event during firmware parsing.
    This would also mean we need to skip not just the change baud
    rate command but also the wait for it.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • pr_debug-ing few pr_infos from the data paths such as tty receive and
    write so as to reduce debugs when we have higher logging levels enabled
    undef VERBOSE in receive to avoid huge logs when log level 8 is set.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • set-right the error codes that the shared transport driver
    returns.
    Instead of magic numbers like -1, return relevant codes such as
    ETIMEDOUT or EIO, EAGAIN when wait times out or uart write bytes don't
    match expected value or when registration fails and needs to be
    attempted again.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • The communication between ST KIM and UIM was interfaced
    over the /dev/rfkill device node.
    Move the interface to a simpler less abusive sysfs entry
    mechanism and document it in Documentation/ABI/testing/
    under sysfs-platform-kim.

    Shared transport driver would now read the UART details
    originally received by bootloader or firmware as platform
    data.
    The data read will be shared over sysfs entries for the user-space
    UIM or other n/w manager/plugins to be read, and assist the driver
    by opening up the UART, setting the baud-rate and installing the
    line discipline.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • The architecture of shared transport had begun with individual
    protocols like bluetooth, fm and gps telling the shared transport
    what sort of protocol they are and then expecting the ST driver
    to parse the incoming data from chip and forward data only
    relevant to the protocol drivers.

    This change would mean each protocol drivers would also send
    information to ST driver as to how to intrepret their protocol
    data coming out of the chip.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

15 Oct, 2010

1 commit

  • Based on comments from Jiri Slaby, drop the register
    storage specifier, remove the unused code, cleanup
    the const to non-const type casting.
    Also make the line discipline ops structure static, since
    its a singleton, unmodified structure which need not be
    in heap.

    Reported-by: Jiri Slaby
    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     

06 Oct, 2010

2 commits

  • Add the Kconfig and the Makefile for the TI_ST driver.
    TI_ST driver is the line discipline driver for the Texas Instrument's
    WiLink chipsets.
    Also add the ti-st folder to list of drivers under drivers/misc.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy
     
  • move the 3 source files st_core.c, st_kim.c and st_ll.c
    from staging to drivers/misc/.

    Texas Instrument's WiLink 7 chipset packs wireless technologies like
    Bluetooth, FM, GPS and WLAN into a single die.
    Among these the Bluetooth, FM Rx/Tx and GPS are interfaced to a apps processor
    over a single UART.

    This line discipline driver allows various protocol drivers such as Bluetooth
    BlueZ driver, FM V4L2 driver and GPS simple character device driver
    to communicate with its relevant core in the chip.

    Each protocol or technologies use a logical channel to communicate with chip.
    Bluetooth uses the HCI-H4 [channels 1-4], FM uses a CH-8 and
    GPS a CH-9 protocol. The driver also constitutes the TI HCI-LL Power
    Management protocol which use channels 30-33.

    Signed-off-by: Pavan Savoy
    Signed-off-by: Greg Kroah-Hartman

    Pavan Savoy