12 Nov, 2009

40 commits

  • This patch adds suspend/resume support for MPC8540 and MPC8641D-
    compatible CPUs. To reach sleep state, we just write the SLP bit
    into the PM control and status register.

    So far we don't support Deep Sleep mode as found in newer MPC85xx
    CPUs (i.e. MPC8536). It can be relatively easy implemented though,
    and for it we reserve 'mem' suspend type.

    Signed-off-by: Anton Vorontsov
    Acked-by: Scott Wood
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • So far the driver is used to reset QE upon resume, which is needed on
    85xx. Later we can move some QE initialization steps into probe().

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • This patch adds QE buffer descriptors mode support for the
    spi_mpc8xxx driver, and as a side effect we now support CPM1
    and CPM2 SPI controllers.

    That means that today we support almost all MPC SPI controllers:

    - MPC834x-style controllers (support PIO mode only);
    - CPM1 and CPM2 controllers (support DMA mode only);
    - QE SPI controllers in CPU mode (PIO mode with shift quirks);
    - QE SPI controllers in buffer descriptors (DMA) mode;

    The only controller we don't currently support is a newer eSPI
    (with a dedicated chip selects and a bit different registers map).

    Signed-off-by: Anton Vorontsov
    Acked-by: David Brownell
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • Soon there will be more flags introduced in subsequent patches, so
    let's turn qe_mode into flags.

    Also introduce mpc8xxx_spi_strmode() and print current SPI mode.

    Signed-off-by: Anton Vorontsov
    Acked-by: David Brownell
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • We'll add more steps soon, so get rid of the duplication.

    Signed-off-by: Anton Vorontsov
    Acked-by: David Brownell
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • This patch fixes the following warning:

    CC drivers/spi/spi_mpc8xxx.o
    spi_mpc8xxx.c: In function 'of_mpc8xxx_spi_probe':
    spi_mpc8xxx.c:681: warning: 'ret' may be used uninitialized in this function

    Signed-off-by: Anton Vorontsov
    Acked-by: David Brownell
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • This is needed to avoid ugly #ifdefs in drivers. Also update fsl_qe_udc
    driver so that now it doesn't define its own versions that cause build
    breakage when the generic stubs are used.

    Signed-off-by: Anton Vorontsov
    Acked-by: Greg Kroah-Hartman
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • The bits are generic to CPM devices, so let's move them to the
    common header file, so drivers won't need to privately reintroduce
    another bunch of the same bits (as we can't include cpm2.h header
    together with cpm1.h).

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • struct mcc defined in both immap_qe.h and immap_cpm2.h, so they will
    conflic when included in a single file. The mcc struct is easy to deal
    with, since it isn't used in any driver (yet), so let's just rename QE
    version to qe_mcc.

    The ucb_ctlr is a bit trickier, since it is used by fsl_qe_udc driver,
    and the driver supports both CPM and QE UDCs, plus the QE version is
    used to form a bigger immap struct.

    I don't want to touch too much of USB code in this series, so for now
    let's just copy most generic version into the common cpm.h header,
    later we'll create cpm_usb.h where we'll place common USB structs that
    are used by QE/CPM UDC and QE Host drivers (FHCI).

    And as for the structs in qe.h and cpm2.h, just prefix them with qe_
    and cpm_.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • When cpm2.h included into spi_mpc8xxx driver, the SPI defines
    in the header conflict with defines in the driver.

    We don't need them in the header file, so remove them. Plus
    remove "struct spi", we'll use a better version in the driver.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • P1020 is another member of Freescale QorIQ series of processors.
    It is an e500 based dual core SOC.
    Being a scaled down version of P2020 it has following differences from P2020:
    - 533MHz - 800MHz core frequency.
    - 256Kbyte L2 cache
    - Ethernet controllers with classification capabilities(new controller).

    From board perspective P1020RDB is same as P2020RDB.

    Signed-off-by: Poonam Aggrwal
    Signed-off-by: Kumar Gala

    Poonam Aggrwal
     
  • It appears that QE shuts down on all MPC85xx CPUs (i.e. MPC8568 and
    MPC8569) and thus needs reset upon resume.

    So modify qe_alive_during_sleep() to account that.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • For MPC8569 CPUs we'll need to reset QE after each suspend, so make
    qe_reset() code path suitable for repeated invocation, that is:

    - Don't initialize rheap structures if already initialized;
    - Don't allocate muram for SDMA if already allocated, just reinitialize
    registers with previously allocated muram offset;
    - Remove __init attributes from qe_reset() and cpm_muram_init();

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • This patch creates the dts files for each core and splits the devices
    between the two cores for P2020RDB.

    core0 has memory, L2, i2c, spi, dma1, usb, eth0, eth1, crypto,
    global-util, pci0,
    core1 has L2, dma2, eth0, pci1, msi.

    MPIC is shared between two cores but each core will protect its
    interrupts from other core by using "protected-sources" of mpic.

    Signed-off-by: Poonam Aggrwal
    Signed-off-by: Kumar Gala

    Poonam Aggrwal
     
  • This is needed to avoid #ifdefs in MPC85xx suspend/resume code.

    Signed-off-by: Anton Vorontsov
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • MPC8569 CPUs have four QE RISCs, so we need to increase MAX_QE_RISC
    constant, otherwise qe_upload_firmware() fails at sanity checking.

    Signed-off-by: Anton Vorontsov
    Acked-by: Timur Tabi
    Signed-off-by: Kumar Gala

    Anton Vorontsov
     
  • Benjamin Herrenschmidt
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs-unstable:
    Btrfs: fix panic when trying to destroy a newly allocated
    Btrfs: allow more metadata chunk preallocation
    Btrfs: fallback on uncompressed io if compressed io fails
    Btrfs: find ideal block group for caching
    Btrfs: avoid null deref in unpin_extent_cache()
    Btrfs: skip btrfs_release_path in btrfs_update_root and btrfs_del_root
    Btrfs: fix some metadata enospc issues
    Btrfs: fix how we set max_size for free space clusters
    Btrfs: cleanup transaction starting and fix journal_info usage
    Btrfs: fix data allocation hint start

    Linus Torvalds
     
  • Rafael debugged a resume-time hang (with oopses in workqueue handling)
    on his laptop that was due to the 'waker' workqueue entry being
    disconnected and then released without the workqueue entry having been
    synchronized.

    Several people were involved, with Oleg Nesterov doing a debugging patch
    showing what workqueue entry was corrupt etc.

    This was a regression introduced by commit 7bee549e19 ("Bluetooth: Add
    USB autosuspend support to btusb driver") as Rafael points out (not
    actually bisected, but it became clear once the bug was found).

    Tested-and-reported-by: Rafael J. Wysocki
    Acked-by: Oliver Neukum
    Cc: Oleg Nesterov
    Cc: Tejun Heo
    Cc: Marcel Holtmann
    Signed-off-by: Linus Torvalds

    Linus Torvalds
     
  • There is a problem where iget5_locked will look for an inode, not find it, and
    then subsequently try to allocate it. Another CPU will have raced in and
    allocated the inode instead, so when iget5_locked gets the inode spin lock again
    and does a search, it finds the new inode. So it goes ahead and calls
    destroy_inode on the inode it just allocated. The problem is we don't set
    BTRFS_I(inode)->root until the new inode is completely initialized. This patch
    makes us set root to NULL when alloc'ing a new inode, so when we get to
    btrfs_destroy_inode and we see that root is NULL we can just free up the memory
    and continue on. This fixes the panic

    http://www.kerneloops.org/submitresult.php?number=812690

    Thanks,

    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     
  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jack/linux-fs-2.6:
    JBD/JBD2: free j_wbuf if journal init fails.
    ext3: Wait for proper transaction commit on fsync
    ext3: retry failed direct IO allocations

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6:
    ALSA: hda - possible read past array alc88[02]_parse_auto_config()
    sound: rawmidi: fix MIDI device O_APPEND error handling
    sound: rawmidi: fix checking of O_APPEND when opening MIDI device
    sound: rawmidi: fix double init when opening MIDI device with O_APPEND
    ALSA: hda - Avoid quirk for HP dc5750
    ALSA: hda - Tweak OLPC XO-1.5 microphone bias
    ALSA: hda: Use model=auto quirk for Sony VAIO VGN-FW170J using ALC262

    Linus Torvalds
     
  • * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6:
    x86/PCI: Adjust GFP mask handling for coherent allocations
    PCI ASPM: fix oops on root port removal

    Linus Torvalds
     
  • * 'merge' of git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc:
    powerpc: pasemi_defconfig update
    powerpc: 2.6.32 update of defconfigs for embedded 6xx/7xxx, 8xx, 8{3,5,6}xxx
    powerpc/8xxx: enable IPsec ESP by default on mpc83xx/mpc85xx
    powerpc/83xx: Fix u-boot partion size for MPC8377E-WLAN boards
    powerpc/85xx: Fix USB GPIOs for MPC8569E-MDS boards
    powerpc/82xx: kmalloc failure ignored in ep8248e_mdio_probe()
    powerpc/85xx: sbc8548 - fixup of PCI-e related DTS fields

    Linus Torvalds
     
  • * master.kernel.org:/home/rmk/linux-2.6-arm:
    ARM: Use a definition for the userspace cmpxchg emulation syscall
    [ARM] Fix test for unimplemented ARM syscalls
    ARM: 5784/1: fix early boot machine ID mismatch error display
    [ARM] orion5x: update defconfig
    [ARM] Kirkwood: update defconfig
    [ARM] Kirkwood: clarify PCIe MEM bus/physical address distinction
    [ARM] kirkwood: fix PCI I/O port assignment
    [ARM] kirkwood: fix section mismatch
    [ARM] OpenRD base: Initialize PCI express and i2c
    [ARM] properly report mv78100 stepping A1
    ARM: 5780/1: KS8695: Fix macro definition bug in regs-switch.c
    ARM: 5779/1: ep93xx/micro9.c: fix implicit declaration of function __raw_readl and IOMEM
    RealView: Add sparsemem support for the RealView PBX platform
    RealView: Remove duplicated #define REALVIEW_SYS_FLAGS* statements
    RealView: Add default memory configuration
    Check whether the SCU was already initialised
    ARMv7: Check whether the SMP/nAMP mode was already enabled
    [ARM] pxa: fix resume failure by saving/restoring IPRx registers
    [ARM] pxa/palm: fix incorrect initialization of Palm Tungsten C keyboard
    [ARM] pxa/zaurus: fix NAND flash OOB layout for Borzoi

    Linus Torvalds
     
  • * 'drm-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6: (52 commits)
    drm/kms: Init the CRTC info fields for modes forced from the command line.
    drm/radeon/r600: CS parser updates
    drm/radeon/kms: add debugfs for power management for AtomBIOS devices
    drm/radeon/kms: initial mode validation support
    drm/radeon/kms/atom/dce3: call transmitter init on mode set
    drm/radeon/kms: store detailed connector info
    drm/radeon/kms/atom/dce3: fix up usPixelClock calculation for Transmitter tables
    drm/radeon/kms/r600: fix rs880 support v2
    drm/radeon/kms/r700: fix some typos in chip init
    drm/radeon/kms: remove some misleading debugging output
    drm/radeon/kms: stop putting VRAM at 0 in MC space on r600s.
    drm/radeon/kms: disable D1VGA and D2VGA if enabled
    drm/radeon/kms: Don't RMW CP_RB_CNTL
    drm/radeon/kms: fix coherency issues on AGP cards.
    drm/radeon/kms: fix rc410 suspend/resume.
    drm/radeon/kms: add quirk for hp dc5750
    drm/radeon/kms/atom: fix potential oops in spread spectrum code
    drm/kms: typo fix
    drm/radeon/kms/atom: Make card_info per device
    drm/radeon/kms/atom: Fix DVO support
    ...

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    highmem: Fix debug_kmap_atomic() to also handle KM_IRQ_PTE, KM_NMI, and KM_NMI_PTE
    highmem: Fix race in debug_kmap_atomic() which could cause warn_count to underflow
    rcu: Fix long-grace-period race between forcing and initialization
    uids: Prevent tear down race

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'irq-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    genirq: try_one_irq() must be called with irq disabled

    Linus Torvalds
     
  • …/git/tip/linux-2.6-tip

    * 'perf-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    perf tools: Fix permission checks
    perf_events: Fix some typo in the perf events config description

    Linus Torvalds
     
  • …l/git/tip/linux-2.6-tip

    * 'sched-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    sched: Use root_task_group_empty only with FAIR_GROUP_SCHED
    sched: Fix kernel-doc function parameter name

    Linus Torvalds
     
  • …git/tip/linux-2.6-tip

    * 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
    x86, amd-ucode: Check UCODE_MAGIC before loading the container file
    x86: Fix error return sequence in __ioremap_caller()
    x86: Add Phoenix/MSC BIOSes to lowmem corruption list

    Linus Torvalds
     
  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tytso/ext4:
    ext4: partial revert to fix double brelse WARNING()
    ext4: Fix return value of ext4_split_unwritten_extents() to fix direct I/O
    ext4: code clean up for dio fallocate handling
    ext4: skip conversion of uninit extents after direct IO if there isn't any
    ext4: fix ext4_ext_direct_IO()'s return value after converting uninit extents
    ext4: discard preallocation when restarting a transaction during truncate

    Linus Torvalds
     
  • * git://git.kernel.org/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog:
    [WATCHDOG] SBC-FITPC2 watchdog driver registration fix

    Linus Torvalds
     
  • * 'fixes-s3c-2632-rc6' of git://git.fluff.org/bjdooks/linux:
    ARM: S3C64XX: DMA: Free node for non-circular queues
    ARM: S3C64XX: DMA: Callback with correct buffer pointer
    ARM: S3C64XX: DMA: Make src and dst transfer size same
    ARM: S3C64XX: DMA: Unify callback functions for success/failure
    ARM: S3C64XX: DMA: Protect buffer pointers while manipulation
    ARM: S3C64XX: Tidy definition and comments in s3c_dma_has_circular()
    ARM: S3C64XX: Remove duplicate s3c_dma_has_circular() definition for S3C64xx.
    ARM: SMDK6410: Allocate more GPIO space for WM1190-EV1
    ARM: SMDK6410: Configure GPIO pull up for WM835x IRQ line

    Linus Torvalds
     
  • * 'for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6: (27 commits)
    V4L/DVB (13314): saa7134: set ts_force_val for the Hauppauge WinTV HVR-1150
    V4L/DVB (13313): saa7134: add support for FORCE_TS_VALID mode for mpeg ts input
    V4L/DVB (13311): uvcvideo: Fix compilation warning with 2.6.32 due to type mismatch with abs()
    V4L/DVB (13309): uvcvideo: Ignore the FIX_BANDWIDTH for compressed video
    V4L/DVB (13287): ce6230 - saa7164-cmd: Fix wrong sizeof
    V4L/DVB (13286): pxa-camera: Fix missing sched.h
    V4L/DVB (13264): gspca_mr97310a: Change vstart for CIF sensor type 1 cams
    V4L/DVB (13257): gspca - m5602-s5k4aa: Add vflip for Fujitsu Amilo Xi 2528
    V4L/DVB (13256): gspca - m5602-s5k4aa: Add another MSI GX700 vflip quirk
    V4L/DVB (13255): gspca - m5602-s5k4aa: Add vflip quirk for the Bruneinit laptop
    V4L/DVB (13240): firedtv: fix regression: tuning fails due to bogus error return
    V4L/DVB (13237): firedtv: length field corrupt in ca2host if length>127
    V4L/DVB (13230): s2255drv: Don't conditionalize video buffer completion on waiting processes
    V4L/DVB (13202): smsusb: add autodetection support for three additional Hauppauge USB IDs
    V4L/DVB (13190): em28xx: fix panic that can occur when starting audio streaming
    V4L/DVB (13170): bttv: Fix reversed polarity error when switching video standard
    V4L/DVB (13169): bttv: Fix potential out-of-order field processing
    V4L/DVB (13167): pt1: Fix a compile error on arm
    V4L/DVB (13132): fix use-after-free Oops, resulting from a driver-core API change
    V4L/DVB (13131): pxa_camera: fix camera pixel format configuration
    ...

    Linus Torvalds
     
  • On an FS where all of the space has not been allocated into chunks yet,
    the enospc can return enospc just because the existing metadata chunks
    are full.

    We get around this by allowing more metadata chunks to be allocated up
    to a certain limit, and finding the right limit is a little fuzzy. The
    problem is the reservations for delalloc would preallocate way too much
    of the FS as metadata. We need to start saying no and just force some
    IO to happen.

    But we also need to let a reasonable amount of the FS become metadata.
    This bumps the hard limit up, later releases will have a better system.

    Signed-off-by: Chris Mason

    Chris Mason
     
  • Currently compressed IO does not deal with not having its entire extent able to
    be allocated. So if we have enough free space to allocate for the extent, but
    its not contiguous, it will fail spectacularly. This patch fixes this by
    falling back on uncompressed IO which lets us spread the delalloc extent across
    multiple extents. I tested this by making us randomly think the reservation had
    failed to make it fallback on the uncompressed io way and it seemed to work
    fine. Thanks,

    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     
  • This patch changes a few things. Hopefully the comments are helpfull, but
    I'll try and be as verbose here.

    Problem:

    My fedora box was taking 1 minute and 21 seconds to boot with btrfs as root.
    Part of this problem was we pick the first block group we can find and start
    caching it, even if it may not have enough free space. The other problem is
    we only search for cached block groups the first time around, which we won't
    find any cached block groups because this is a newly mounted fs, so we end up
    caching several block groups during bootup, which with alot of fragmentation
    takes around 30-45 seconds to complete, which bogs down the system. So

    Solution:

    1) Don't cache block groups willy-nilly at first. Instead try and figure out
    which block group has the most free, and therefore will take the least amount
    of time to cache.

    2) Don't be so picky about cached block groups. The other problem is once
    we've filled up a cluster, if the block group isn't finished caching the next
    time we try and do the allocation we'll completely ignore the cluster and
    start searching from the beginning of the space, which makes us cache more
    block groups, which slows us down even more. So instead of skipping block
    groups that are not finished caching when we have a hint, only skip the block
    group if it hasn't started caching yet.

    There is one other tweak in here. Before if we allocated a chunk and still
    couldn't find new space, we'd end up switching the space info to force another
    chunk allocation. This could make us end up with way too many chunks, so keep
    track of this particular case.

    With this patch and my previous cluster fixes my fedora box now boots in 43
    seconds, and according to the bootchart is not held up by our block group
    caching at all.

    Signed-off-by: Josef Bacik
    Signed-off-by: Chris Mason

    Josef Bacik
     
  • I re-orderred the checks to avoid dereferencing "em" if it was null.

    Found by smatch static checker.

    Signed-off-by: Dan Carpenter
    Signed-off-by: Chris Mason

    Dan Carpenter
     
  • We don't need to call btrfs_release_path because btrfs_free_path will do
    that for us.

    Signed-off-by: Li Dongyang
    Signed-off-by: Chris Mason

    Li Dongyang