03 Jul, 2014

1 commit


02 Jul, 2014

8 commits

  • Almost all of ci_udc.c uses variable name "ep" for a struct usb_ep and
    "ci_ep" for a struct ci_ep. This is nice and consistent, and helps people
    know what type a variable is without searching for the declaration.
    handle_ep_complete() doesn't do this, so fix it to be consistent.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • A UDC's alloc_request method should zero out the newly allocated request.
    Ensure the Atmel driver does so. This issue was found by code inspection,
    following the investigation of an intermittent issue with ci_udc, which
    was tracked down to failing to zero out allocated requests following some
    of my changes. All other UDC drivers already zero out requests in one
    way or another.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • struct ci_req is a purely software structure, and needs no specific
    memory alignment. Hence, allocate it with calloc() rather than
    memalign(). The use of memalign() was left-over from when struct ci_req
    was going to hold the aligned bounce buffer, but this is now dynamically
    allocated.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • There's no need to store an array of QTD pointers in the controller.
    Since the calculation is so simple, just have ci_get_qtd() perform it
    at run-time, rather than pre-calculating everything.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • 2 QTDs are allocated for each EP. The current allocation scheme aligns
    the first QTD in each pair, but simply adds the struct size to calculate
    the second QTD's address. This will result in a non-cache-aligned
    addresss IF the system's ARCH_DMA_MINALIGN is not 32 bytes (i.e. the
    size of struct ept_queue_item).

    Similarly, the original ilist_ent_sz calculation aligned the value to
    ARCH_DMA_MINALIGN but didn't take the USB HW's 32-byte alignment
    requirement into account. This doesn't cause a practical issue unless
    ARCH_DMA_MINALIGN < 32 (which I suspect is quite unlikely), but we may
    as well fix the code to be explicit, so it's obviously completely
    correct.

    The new value of ILIST_ENT_SZ takes all alignment requirements into
    account, so we can simplify ci_{flush,invalidate}_qtd() by simply using
    that macro rather than calling roundup().

    Similarly, the calculation of controller.items[i] can be simplified,
    since each QTD is evenly spaced at its individual alignment requirement,
    rather than each pair being aligned, and entries within the pair being
    spaced apart only by structure size.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • This will allow functions other than ci_udc_probe() to make use of the
    constants in a future change.

    This in turn requires converting the const int variables to #defines,
    since the initialization of one global const int can't depend on the
    value of another const int; the compiler thinks it's non-constant if
    that dependency exists.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • Fix ci_ep_submit_next_request()'s ZLP transmission code to explicitly
    call ci_get_qtd() to find the address of the other QTD to use. This
    will allow us to correctly align each QTD individually in the future,
    which may involve leaving a gap between the QTDs.

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • ci_udc_probe() initializes a pair of QHs and QTDs for each EP. After
    each pair has been initialized, the pair is cache-flushed. The
    conversion from QH/QTD index [0..2*NUM_END_POINTS) to EP index
    [0..NUM_ENDPOINTS] is incorrect; it simply subtracts 1 (which yields
    the QH/QTD index of the first entry in the pair) rather than dividing
    by two (which scales the range). Fix this.

    On my system, this avoids cache debug prints due to requests to flush
    unaligned ranges. This is caused because the flush calls happen before
    the items[] array entries are initialized for all but EP0.

    Signed-off-by: Stephen Warren

    Stephen Warren
     

26 Jun, 2014

11 commits

  • When dfu_init_env_entities() fails part-way through, some entities may
    have been added to dfu_list. These are only removed by dfu_free_entities().
    If that function isn't called, those stale entities will still exist the
    next time dfu_init_env_entities() is called, leading to confusion. Fix
    do_dfu() to ensure that dfu_free_entities() is always called, to avoid
    this confusion.

    Signed-off-by: Stephen Warren
    Acked-by: Lukasz Majewski
    Tested-by: Lukasz Majewski

    Stephen Warren
     
  • Add LAN9500A product ID (0x9e00) in order to support LAN9500A based dongles.
    Tested on cm_t335.

    Signed-off-by: Ilya Ledvich
    Acked-by: Marek Vasut

    Ilya Ledvich
     
  • cb_getvar tries to prevent overflowing the response buffer
    by using strncat. But strncat takes the number of data bytes
    copied as a limit not the total buffer length so it can still
    overflow. Pass the correct value instead.

    cc: Sebastian Andrzej Siewior
    cc: Rob Herring
    Signed-off-by: Jeroen Hofstee

    Jeroen Hofstee
     
  • Because of the brackets the & and && is evaluated before
    the comparison. This is likely not the intention. Change
    it to test the first and second condition to both be true.

    cc: Marek Vasut
    Signed-off-by: Jeroen Hofstee

    Jeroen Hofstee
     
  • since ALLOC_CACHE_ALIGN_BUFFER defines a pointer and not a
    buffer, the memset with sizeof(rqt) likely does something else
    then intended. Since there is a memcpy directly after it with
    the full size, drop the memset completely.

    Cc: Lukasz Majewski
    Cc: Marek Vasut
    Signed-off-by: Jeroen Hofstee
    Acked-by: Lukasz Majewski

    Jeroen Hofstee
     
  • Since the struct fsg_common is calloced, reset it completely
    with zero's when reused. While at it, make checkpatch happy.

    cc: Lukasz Majewski
    cc: Piotr Wilczek
    cc: Kyungmin Park
    cc: Marek Vasut
    Signed-off-by: Jeroen Hofstee
    Acked-by: Marek Vasut
    Acked-by: Lukasz Majewski

    Jeroen Hofstee
     
  • Initialization of r8a66597 info structure is not enough.
    Because initilization was used size of pointer.
    This fixes that use size of r8a6659 info structure.

    Signed-off-by: Yasuhisa Umano

    Yasuhisa Umano
     
  • This driver is processed as two USB hub despite one.
    The number of root hub is defined in R8A66597_MAX_ROOT_HUB.
    This fixes that register is accessed by using the definition
    of R8A66597_MAX_ROOT_HUB.

    Signed-off-by: Yasuhisa Umano

    yasuhisa umano
     
  • For plain array const can be either before or after
    the type definition. Adding both is simply redundand.
    Remove the later one.

    cc: marex@denx.de
    Signed-off-by: Jeroen Hofstee

    Jeroen Hofstee
     
  • s/ot/to/

    Signed-off-by: Stephen Warren

    Stephen Warren
     
  • ci_udc.c's usb_gadget_unregister_driver() doesn't call driver->unbind()
    unlike other USB gadget drivers. Fix it to do this.

    Without this, when ether.c's CDC Ethernet device is torn down,
    eth_unbind() is never called, so dev->gadget is never set to NULL.
    For some reason, usb_eth_halt() is called both at the end of the first
    use of the Ethernet device, and prior to any subsequent use. Since
    dev->gadget is never cleared, all calls to usb_eth_halt() attempt to
    stop, disconnect, and clean up the device, resulting in double cleanup,
    which hangs U-Boot on my Tegra device at least.

    ci_udc allocates its own singleton EP0 request object, and cleans it up
    during usb_gadget_unregister_driver(). This appears necessary when using
    the USB gadget framework in U-Boot, since that does not allocate/free
    the EP0 request. However, the CDC Ethernet driver *does* allocate and
    free its own EP0 requests. Consequently, we must protect
    ci_ep_free_request() against double-freeing the request.

    Signed-off-by: Stephen Warren

    Stephen Warren
     

25 Jun, 2014

2 commits


24 Jun, 2014

4 commits

  • local_irq_save() should be a macro, not a function
    because local_irq_save() saves flag to the given argument.

    GCC is silent about this issue, but Clang warns:

    In file included from lib/asm-offsets.c:15:
    In file included from include/common.h:20:
    In file included from include/linux/bitops.h:110:
    arch/sandbox/include/asm/bitops.h:59:17:
    warning: variable 'flags' is uninitialized when used here
    [-Wuninitialized]
    local_irq_save(flags);
    ^~~~~

    That change causes another warning:

    In file included from include/linux/bitops.h:110:0,
    from include/common.h:20,
    from lib/asm-offsets.c:15:
    arch/sandbox/include/asm/bitops.h: In function ‘test_and_set_bit’:
    arch/sandbox/include/asm/bitops.h:56:16: warning: unused variable ‘flags’ [-Wunused-variable]

    So, flags should be set to __always_unused.

    Signed-off-by: Masahiro Yamada
    Cc: Simon Glass
    Cc: Jeroen Hofstee
    Acked-by: Simon Glass
    Acked-by: Jeroen Hofstee

    Masahiro Yamada
     
  • Each node in the linked-list that os_dirent_ls() returns has its next
    pointer set only when the next node is created. For the last node in the
    list, there is no next node, so this never happens, and the next pointer
    is never initialized. Explicitly initialize the next pointer so that it
    isn't dangling. Without this, "sb ls" might crash.

    Signed-off-by: Stephen Warren
    Acked-by: Simon Glass

    Stephen Warren
     
  • Commit 95fac6ab4589 "sandbox: Use os functions to read host device tree"
    removed the ability for get_device_and_partition() to handle the "host"
    device type, and redirect accesses to it to the host filesystem. This
    broke some unit tests that use this feature. So, revert that change. The
    code added back by this patch is slightly different to pacify checkpatch.

    However, we're then left with "host" being both:
    - A pseudo device that accesses the hosts real filesystem.
    - An emulated block device, which accesses "sectors" inside a file stored
    on the host.

    In order to resolve this discrepancy, rename the pseudo device from host
    to hostfs, and adjust the unit-tests for this change.

    The "help sb" output is modified to reflect this rename, and state where
    the host and hostfs devices should be used.

    Signed-off-by: Stephen Warren
    Tested-by: Josh Wu
    Acked-by: Simon Glass
    Tested-by: Simon Glass

    Stephen Warren
     
  • Until now building the x86 arch boards required 32-bit toolchain. As
    many x86_64 toolchains come with 32-bit support (multilib) that's a
    good idea to enable build with such toolchains.

    The change required was to specify the usage of 32-bit explicitly to
    the compiler and the linker (-m32 and -m elf_i386 flags) and locate
    the right libgcc path.

    Signed-off-by: Vasili Galka
    Acked-by: Simon Glass

    Vasili Galka
     

23 Jun, 2014

2 commits

  • - add CONFIG_SYS_GENERIC_BOARD
    - remove CONFIG_OF_CONTROL to boot again

    Signed-off-by: Heiko Schocher
    Acked-by: Kim Phillips
    Acked-by: Simon Glass

    Heiko Schocher
     
  • move fdtdec_get_int() out of lib/fdtdec.c into lib/fdtdec_common.c
    as this function is also used, if CONFIG_OF_CONTROL is not
    used. Poped up on the ids8313 board using signed FIT images,
    and activating CONFIG_SYS_GENERIC_BOARD. Without this patch
    it shows on boot:

    No valid FDT found - please append one to U-Boot binary, use u-boot-dtb.bin or define CONFIG_OF_EMBED. For sandbox, use -d

    With this patch, it boots again with CONFIG_SYS_GENERIC_BOARD
    enabled.

    Signed-off-by: Heiko Schocher
    Acked-by: Simon Glass
    Cc: Tom Rini

    Heiko Schocher
     

22 Jun, 2014

2 commits


21 Jun, 2014

10 commits