17 Oct, 2008

40 commits

  • This patchs adds the CONFIG_AIO option which allows to remove support
    for asynchronous I/O operations, that are not necessarly used by
    applications, particularly on embedded devices. As this is a
    size-reduction option, it depends on CONFIG_EMBEDDED. It allows to
    save ~7 kilobytes of kernel code/data:

    text data bss dec hex filename
    1115067 119180 217088 1451335 162547 vmlinux
    1108025 119048 217088 1444161 160941 vmlinux.new
    -7042 -132 0 -7174 -1C06 +/-

    This patch has been originally written by Matt Mackall
    , and is part of the Linux Tiny project.

    [randy.dunlap@oracle.com: build fix]
    Signed-off-by: Thomas Petazzoni
    Cc: Benjamin LaHaise
    Cc: Zach Brown
    Signed-off-by: Matt Mackall
    Signed-off-by: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Thomas Petazzoni
     
  • [akpm@linux-foundation.org: minor fixlets and cleanups]
    Signed-off-by: Bernhard Weirich
    Signed-off-by: Evgeniy Polyakov
    Cc: Ben Gardner
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Bernhard Weirich
     
  • Optimize the ds_set_pullup function. For a strong pullup to be sent the
    ds2490 has to have both the strong pullup mode enabled, and the specific
    write operation has to have the SPU bit enabled. Previously the write
    always had the SPU bit enabled and both the duration and model was set
    when a strong pullup was requested. Now the strong pullup mode is enabled
    at initialization time, the delay is updated only when the value changes,
    and the write SPU bit is set only when a strong pullup is required. This
    removes two or three bus transactions per strong pullup request.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Provide some additional details about the status of the driver and the
    ds2490 hardware.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Cc: Randy Dunlap
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Drop the extra ds_wait_status() in ds_write_block().

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • This replaces some magic numbers with marcos and corrects one marco.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Reset the device in init as it can be in a bad state. This is necessary
    because a block write will wait for data to be placed in the output buffer
    and block any later commands which will keep accumulating and the device
    will not be idle. Another case is removing the ds2490 module while a bus
    search is in progress, somehow a few commands get through, but the input
    transfers fail leaving data in the input buffer. This will cause the next
    read to fail see the note in ds_recv_data.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • ds_reset no longer calls ds_wait_status, the result wasn't used and it
    would only delay the following data operations.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • - add result register #defines
    - rename ds_dump_status to ds_print_msg
    - rename ds_recv_status to ds_dump_status
    - ds_dump_status prints the requested status and no longer reads the
    status, this is because the second status read can return different
    data for example the result register
    - the result register will be printed, though limited to detecting a
    new device, detecting other values such as a short would require
    additional reporting methods
    - ST_EPOF was moved to ds_wait_status to clear the error condition
    sooner

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Simplify and fix ds_touch_bit. If a device is attached in the middle of a
    bus search the status register will return more than the default 16 bytes.
    The additional bytes indicate that it has detected a new device. The way
    ds_wait_status is coded, if it doesn't read 16 status bytes it returns an
    error value. ds_touch_bit then will detect that error and return an
    error. In that case it doesn't read the input buffer and returns
    uninitialized data. It doesn't stop there. The next transaction will not
    expect the extra byte in the input buffer and the short read will cause an
    error and clear out both the old byte and new data in the input buffer.

    Just ignore the value of ds_wait_status. It is still required to wait
    until ds2490 is again idle and there is data to read when ds_recv_data is
    called. This also removes the while loop. None of the other commands
    wait and verify that the issued command is in the status register.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Don't export read and write bit operations, they didn't work, they weren't
    used, and they can't be made to work. The one wire low level bit
    operations expect to set high or low levels, the ds2490 hardware only
    supports complete read or write time slots, better to just comment them
    out.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • ds_write_bit doesn't read the input buffer, so add COMM_ICP and a comment
    that it will no longer generate a read back data byte. If there is an
    extra data byte later on then it will cause an error and discard what data
    was there. Corrected operator ordering for ds_send_control.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Add strong pullup support for ds2490 driver, also drop mdelay(750), which
    busy waits, usage in favour of msleep for long delays. Now with msleep
    only being called when the strong pullup is active, one wire bus
    operations are only taking minimal system overhead.

    The new set_pullup will only enable the strong pullup when requested,
    which is expected to be the only write operation that will benefit from a
    strong pullup.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Corrected print message, it was writing not reading, this also prints the
    endpoint used for the write instead of hardcoding it. Failed to write
    1-wire data to ep0x%x: err=%d.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Like the previous w1_io.c reset coments and msleep patch, I don't have the
    hardware to verify the change, but I think it is safe. It also helps to
    see a comment like this in the code. "We'll wait a bit longer just to be
    sure." If they are going to calculate delaying 324.9us, but actually delay
    500us, why not just give up the CPU and sleep? This is designed for a
    battery powered ARM system, avoiding busywaiting has to be good for
    battery life.

    I sent a request for testers March 7, 2008 to the Linux kernel mailing
    list and two developers who have patches for ds1wm.c, but I didn't get
    any respons.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • w1_reset_bus, added some comments about the timing and switched to msleep
    for the later delay. I don't have the hardware to test the sleep after
    reset change. The one wire doesn't have a timing requirement between
    commands so it is fine. I do have the USB hardware and it would be in big
    trouble with 10ms interrupt transfers to find that the reset completed.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • s/printk/dev_dbg/

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Follow the example of other devices (like the joystick device). Pick the
    first available id for each detected device. Currently for USB devices,
    suspending and resuming would cause the number to increment.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • sl->master->mutex and dev->mutex refer to the same mutex variable, but be
    consistent and use the same set of pointers for the lock and unlock calls.
    It is less confusing (and one less pointer dereference this way).

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Removed the w1_family structure member variable need_exit. It was only
    being set and never used. Even if it were to be used it is a polling type
    operation.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Fixed data reading bug by replacing binary attribute with device one.

    Switching the sysfs read from bin_attribute to device_attribute. The data
    is far under PAGE_SIZE so the binary interface isn't required. As the
    device_attribute interface will make one call to w1_therm_read per file
    open and buffer, the result is, the following problems go away.

    buffer overflow:
    Execute a short read on w1_slave and w1_therm_read_bin would still
    return the full string size worth of data clobbering the user space
    buffer when it returned. Switching to device_attribute avoids the
    buffer overflow problems. With the snprintf formatted output dealing
    with short reads without doing a conversion per read would have
    been difficult.
    bad behavior:
    `cat w1_slave` would cause two temperature conversions to take place.
    Previously the code assumed W1_SLAVE_DATA_SIZE would be returned with
    each read. It would not return 0 unless the offset was less
    than W1_SLAVE_DATA_SIZE. The result was the first read did a
    temperature conversion, filled the buffer and returned, the
    offset in the second read would be less than
    W1_SLAVE_DATA_SIZE and also fill the buffer and return, the
    third read would finnally have a big enough offset to return 0
    and cause cat to stop. Now w1_therm_read will be called at
    most once per open.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Fix bug reading the id sysfs file. If less than the full 8 bytes were
    read, the next read would start at the first byte instead of continuing.
    It needed the offset added to memcpy, or the better solution was to
    replace it with the device attribute instead of bin attribute.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Document w1_master_add, w1_master_remove, search_count, and pullup.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Added a new module parameter search_count which allows overriding the
    default search count. -1 continual, 0 disabled, N that many times.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Simplified the logic in w1_slave_found by using the new
    w1_attach_slave_device function to find a slave and mark it as active or
    add the device if the crc checks.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • sysfs entries were added to manually add and remove slave devices. This
    is useful if the automatic bus searching is disabled, and the device ids
    are already known.

    [akpm@linux-foundation.org: fix printk types]
    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Added strong pullup to thermal sensor driver and general documentation on
    the sensor.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Add a strong pullup option to the w1 system. This supplies extra power
    for parasite powered devices. There is a w1_master_pullup sysfs entry and
    enable_pullup module parameter to enable or disable the strong pullup.

    The one wire bus requires at a minimum one wire and ground. The common
    wire is used for sending and receiving data as well as supplying power to
    devices that are parasite powered of which temperature sensors can be one
    example. The bus must be idle and left high while a temperature
    conversion is in progress, in addition the normal pullup resister on
    larger networks or even higher temperatures might not supply enough power.
    The pullup resister can't provide too much pullup current, because
    devices need to pull the bus down to write a value. This enables the
    strong pullup for supported hardware, which can supply more current when
    requested. Unsupported hardware will just delay with the bus high.

    The hardware USB 2490 one wire bus master has a bit on some commands which
    will enable the strong pullup as soon as the command finishes executing.
    To use strong pullup, call the new w1_next_pullup function to register the
    duration. The next write command will call set_pullup before sending the
    data, and reset the duration to zero once it returns.

    Switched from simple_strtol to strict_strtol.

    Signed-off-by: David Fries
    Cc: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • The w1_process thread's sleeping and termination has been modified.
    msleep_interruptible was replaced by schedule_timeout and schedule to
    allow for kthread_stop and wake_up_process to interrupt the sleep and the
    unbounded sleeping when a bus search is disabled. The W1_MASTER_NEED_EXIT
    and flags variable were removed as they were redundant with
    kthread_should_stop and kthread_stop. If w1_process is sleeping,
    requesting a search will immediately wake it up rather than waiting for
    the end of msleep_interruptible previously.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Move the creation of the w1_process thread to after the device has been
    initialized. This way w1_process doesn't have to check to see if it has
    been initialized and the bus search can proceed without sleeping. That
    also eliminates two checks in the w1_process loop. The sleep now happens
    at the end of the loop not the beginning.

    Also added a comment for why the atomic_set was 2.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • Early abort if the master driver or the hardware goes away in the middle
    of a bus search operation. The alternative is to spam the print buffer up
    to 64*64 times with read errors in the case of USB.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • w1_control_thread was removed which would wake up every second and process
    newly registered family codes and complete some final cleanup for a
    removed master. Those routines were moved to the threads that were
    previously requesting those operations. A new function
    w1_reconnect_slaves takes care of reconnecting existing slave devices when
    a new family code is registered or removed. The removal case was missing
    and would cause a deadlock waiting for the family code reference count to
    decrease, which will now happen. A problem with registering a family code
    was fixed. A slave device would be unattached if it wasn't yet claimed,
    then attached at the end of the list, two unclaimed slaves would cause an
    infinite loop.

    The struct w1_bus_master.search now takes a pointer to the struct
    w1_master device to avoid searching for it, which would have caused a
    lock ordering deadlock with the removal of w1_control_thread.

    Signed-off-by: David Fries
    Signed-off-by: Evgeniy Polyakov
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    David Fries
     
  • tpm_register_hardware() leaks devname on an error path.

    Addresses http://bugzilla.kernel.org/show_bug.cgi?id=11425

    Reported-by: Daniel Marjamki
    Cc: Debora Velarde
    Cc: Rajiv Andrade
    Cc: Marcel Selhorst
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Cc: Eric Paris
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Rajiv Andrade
     
  • Patch tpm-correct-tpm-timeouts-to-jiffies-conversion reveals a bug in the
    Broadcom BCM0102 TPM chipset used in the Dell Latitude D820 - although
    most of the timeouts are returned in usecs as per the spec, one is
    apparently returned in msecs, which results in a too-small value leading
    to a timeout when the code treats it as usecs. To prevent a regression,
    we check for the known too-short value and adjust it to a value that makes
    things work.

    Signed-off-by: Valdis Kletnieks
    Cc: Marcin Obara
    Cc: Marcel Selhorst
    Cc: Kylene Jo Hall
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Valdis Kletnieks
     
  • This patch fixes timeouts conversion to jiffies, by replacing
    msecs_to_jiffies() calls with usecs_to_jiffies(). According to TCG TPM
    Specification Version 1.2 Revision 103 (pages 166, 167) TPM timeouts and
    durations are returned in microseconds (usec) not in miliseconds (msec).

    This fixes a long hang while loading TPM driver, if TPM chip starts in
    "Idle" state instead of "Ready" state. Without this patch - 'modprobe'
    may hang for 30 seconds or more.

    Signed-off-by: Marcin Obara
    Cc: Marcel Selhorst
    Cc: Kylene Jo Hall
    Cc: Jiri Slaby
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Marcin Obara
     
  • Remove CVS keywords that weren't updated for a long time from comments.

    Signed-off-by: Adrian Bunk
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Adrian Bunk
     
  • Cannot assume writes will fully complete, so this conversion goes the easy
    way and always brings the page uptodate before the write.

    [dhowells@redhat.com: style tweaks]
    Signed-off-by: Nick Piggin
    Acked-by: David Howells
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Nick Piggin
     
  • Make the Thermal messages (temperature got past Tmid) be displayed only
    once because:

    1) it's the BIOS job to configure and handle the memory throttling
    2) if the BIOS is broken or is aware about the condition, flooding the
    system logs won't help anything.
    3) According to the specification update for Intel 5000 MCHs, all the
    revisions of this MCH have problems on the thermal sensors, making
    not automatic (a.k.a. intelligent thermal throttling) impossible.

    Signed-off-by: Aristeu Rozanski
    Signed-off-by: Doug Thompson
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aristeu Rozanski
     
  • Update the i5000_edac messages, making everything pass through the EDAC
    (so the log controls will work) and being more specific about the errors.
    Also, it makes the miscellaneous errors optional and disabled by default.

    As I didn't found anywhere information about M23ERR-M26ERR
    (FERR_NF_THERMAL) on FERR_NF_FBD, I'm removing them.

    Signed-off-by: Aristeu Rozanski
    Signed-off-by: Doug Thompson
    Cc: Alan Cox
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Aristeu Rozanski