18 Dec, 2020

2 commits

  • * pm/next: (55 commits)
    MLK-24081-01: power: imx: Add hdmi rx power domain
    soc: fsl: enable acpi support in RCPM driver
    soc: fsl: handle RCPM errata A-008646 on SoC LS1021A
    LF-2594-4 imx: scu-pd: remove mlb power domain
    MLK-24833-1 imx: scu-pd: add lpi2c4 power domain for imx8qm
    ...

    BJ DevOps Team
     
  • * origin/net/dpaa2: (31 commits)
    bus: fsl-mc: added missing fields to dprc_rsp_get_obj_region structure
    bus: fsl-mc: simplify DPRC version check
    Fixed qbman alignment error in the virtualization context
    dpaa2-mac: select FSL_XGMAC_MDIO
    dpaa2-mac: probe standalone DPMAC objects
    ...

    BJ DevOps Team
     

14 Dec, 2020

12 commits

  • This patch enables ACPI support in RCPM driver.

    Signed-off-by: Peng Ma
    Signed-off-by: Ran Wang

    Peng Ma
     
  • Hardware issue:
    - Reading register RCPM_IPPDEXPCR1 always return zero, this causes
    system firmware could not get correct information and wrongly do
    clock gating for all wakeup source IP during system suspend. Then
    those IPs will never get chance to wake system.

    Workaround:
    - Copy register RCPM_IPPDEXPCR1's setting to register SCFG_SPARECR8
    to allow system firmware's psci method read it and do things accordingly.

    Signed-off-by: Biwen Li
    Signed-off-by: Ran Wang

    Biwen Li
     
  • When running as a guest, under KVM, the CENA region is mapped
    as device memory, so uncacheable. When the memory is mapped
    as device memory, the unaligned accesses are not allowed.
    Memcpy is optimized to transfer 8 bytes at a time regardless
    of the start address and might cause alignment issues.

    Signed-off-by: Diana Craciun

    Diana Craciun
     
  • Setting the software portal configuration DE(dequeue stashing
    enable) bit. This should enable the ACP (Accelerator Coherency
    Port).

    During test this improved performance on the LS2088a slightly. No
    effect on the LX2160a.

    Signed-off-by: Youri Querry

    Youri Querry
     
  • Order preservation is a feature that will be supported
    in dpni, dpseci and dpci devices.
    This is a preliminary patch for the changes to be
    introduced in the corresponding drivers.

    Signed-off-by: Radu Alexe
    Signed-off-by: Horia Geantă

    Horia Geantă
     
  • The mechanism for indicating to HW that a frame was dropped
    when performing HW order restoration changed in QBMan 5.0 to
    use a management command instead of a special enqueue command.
    This patch implements that change when running on a QBMan 5.0
    and above device.

    Signed-off-by: Roy Pledge

    Roy Pledge
     
  • Add DPIO support for HW assisted order restoration

    Signed-off-by: Roy Pledge

    Roy Pledge
     
  • Once we enable the cacheable portal memory, we need to do
    cache flush for enqueue, vdq, buffer release, and management
    commands, as well as invalidate and prefetch for the valid bit
    of management command response and next index of dqrr.

    Signed-off-by: Haiying Wang

    Haiying Wang
     
  • Change cache enabled regsiter accessed to be cacheable
    plus non-shareable to meet the performance requirement.
    QMan's CENA region contains registers and structures that
    are 64byte in size and are inteneded to be accessed using a
    single 64 byte bus transaction, therefore this portal
    memory should be configured as cache-enabled. Also because
    the write allocate stash transcations of QBMan should be
    issued as cachable and non-coherent(non-sharable), we
    need to configure this region to be non-shareable.

    Signed-off-by: Haiying Wang

    Haiying Wang
     
  • Make sure that the QBMan device cleanup routines are executed
    when the device was previously initialized. This is needed for
    kexec since the device will keep it's state from the previous
    kernel that was executing.

    Signed-off-by: Roy Pledge

    Roy Pledge
     
  • In the last stage of deep sleep, software will trigger a Finite
    State Machine (FSM) to control the hardware procedure, such a
    board isolation, killing PLLs, removing power, and so on.

    When the system is waked up by an interrupt, the FSM controls
    the hardware to complete the early resume procedure.

    This patch configure the EPU FSM preparing for deep sleep.

    Signed-off-by: Hongbo Zhang
    Signed-off-by: Chenhui Zhao
    Signed-off-by: Ran Wang

    Ran Wang
     
  • FPGA on LX2160AQDS/LX2160ARDB connected on I2C bus, so add qixis driver
    which is basically an i2c client driver to control FPGA.

    Signed-off-by: Pankaj Bansal

    Pankaj Bansal
     

24 Nov, 2020

1 commit

  • The local variable 'cpumask_t mask' is in the stack memory, and its address
    is assigned to 'desc->affinity' in 'irq_set_affinity_hint()'.
    But the memory area where this variable is located is at risk of being
    modified.

    During LTP testing, the following error was generated:

    Unable to handle kernel paging request at virtual address ffff000012e9b790
    Mem abort info:
    ESR = 0x96000007
    Exception class = DABT (current EL), IL = 32 bits
    SET = 0, FnV = 0
    EA = 0, S1PTW = 0
    Data abort info:
    ISV = 0, ISS = 0x00000007
    CM = 0, WnR = 0
    swapper pgtable: 4k pages, 48-bit VAs, pgdp = 0000000075ac5e07
    [ffff000012e9b790] pgd=00000027dbffe003, pud=00000027dbffd003,
    pmd=00000027b6d61003, pte=0000000000000000
    Internal error: Oops: 96000007 [#1] PREEMPT SMP
    Modules linked in: xt_conntrack
    Process read_all (pid: 20171, stack limit = 0x0000000044ea4095)
    CPU: 14 PID: 20171 Comm: read_all Tainted: G B W
    Hardware name: NXP Layerscape LX2160ARDB (DT)
    pstate: 80000085 (Nzcv daIf -PAN -UAO)
    pc : irq_affinity_hint_proc_show+0x54/0xb0
    lr : irq_affinity_hint_proc_show+0x4c/0xb0
    sp : ffff00001138bc10
    x29: ffff00001138bc10 x28: 0000ffffd131d1e0
    x27: 00000000007000c0 x26: ffff8025b9480dc0
    x25: ffff8025b9480da8 x24: 00000000000003ff
    x23: ffff8027334f8300 x22: ffff80272e97d000
    x21: ffff80272e97d0b0 x20: ffff8025b9480d80
    x19: ffff000009a49000 x18: 0000000000000000
    x17: 0000000000000000 x16: 0000000000000000
    x15: 0000000000000000 x14: 0000000000000000
    x13: 0000000000000000 x12: 0000000000000040
    x11: 0000000000000000 x10: ffff802735b79b88
    x9 : 0000000000000000 x8 : 0000000000000000
    x7 : ffff000009a49848 x6 : 0000000000000003
    x5 : 0000000000000000 x4 : ffff000008157d6c
    x3 : ffff00001138bc10 x2 : ffff000012e9b790
    x1 : 0000000000000000 x0 : 0000000000000000
    Call trace:
    irq_affinity_hint_proc_show+0x54/0xb0
    seq_read+0x1b0/0x440
    proc_reg_read+0x80/0xd8
    __vfs_read+0x60/0x178
    vfs_read+0x94/0x150
    ksys_read+0x74/0xf0
    __arm64_sys_read+0x24/0x30
    el0_svc_common.constprop.0+0xd8/0x1a0
    el0_svc_handler+0x34/0x88
    el0_svc+0x10/0x14
    Code: f9001bbf 943e0732 f94066c2 b4000062 (f9400041)
    ---[ end trace b495bdcb0b3b732b ]---
    Kernel panic - not syncing: Fatal exception
    SMP: stopping secondary CPUs
    SMP: failed to stop secondary CPUs 0,2-4,6,8,11,13-15
    Kernel Offset: disabled
    CPU features: 0x0,21006008
    Memory Limit: none
    ---[ end Kernel panic - not syncing: Fatal exception ]---

    Fix it by using 'cpumask_of(cpu)' to get the cpumask.

    Signed-off-by: Hao Si
    Signed-off-by: Lin Chen
    Signed-off-by: Yi Wang
    Signed-off-by: Li Yang

    Hao Si
     

23 Sep, 2020

4 commits


05 Jun, 2020

1 commit

  • Pull ARM/SoC driver updates from Arnd Bergmann:
    "These are updates to SoC specific drivers that did not have another
    subsystem maintainer tree to go through for some reason:

    - Some bus and memory drivers for the MIPS P5600 based Baikal-T1 SoC
    that is getting added through the MIPS tree.

    - There are new soc_device identification drivers for TI K3, Qualcomm
    MSM8939

    - New reset controller drivers for NXP i.MX8MP, Renesas RZ/G1H, and
    Hisilicon hi6220

    - The SCMI firmware interface can now work across ARM SMC/HVC as a
    transport.

    - Mediatek platforms now use a new driver for their "MMSYS" hardware
    block that controls clocks and some other aspects in behalf of the
    media and gpu drivers.

    - Some Tegra processors have improved power management support,
    including getting woken up by the PMIC and cluster power down
    during idle.

    - A new v4l staging driver for Tegra is added.

    - Cleanups and minor bugfixes for TI, NXP, Hisilicon, Mediatek, and
    Tegra"

    * tag 'arm-drivers-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (155 commits)
    clk: sprd: fix compile-testing
    bus: bt1-axi: Build the driver into the kernel
    bus: bt1-apb: Build the driver into the kernel
    bus: bt1-axi: Use sysfs_streq instead of strncmp
    bus: bt1-axi: Optimize the return points in the driver
    bus: bt1-apb: Use sysfs_streq instead of strncmp
    bus: bt1-apb: Use PTR_ERR_OR_ZERO to return from request-regs method
    bus: bt1-apb: Fix show/store callback identations
    bus: bt1-apb: Include linux/io.h
    dt-bindings: memory: Add Baikal-T1 L2-cache Control Block binding
    memory: Add Baikal-T1 L2-cache Control Block driver
    bus: Add Baikal-T1 APB-bus driver
    bus: Add Baikal-T1 AXI-bus driver
    dt-bindings: bus: Add Baikal-T1 APB-bus binding
    dt-bindings: bus: Add Baikal-T1 AXI-bus binding
    staging: tegra-video: fix V4L2 dependency
    tee: fix crypto select
    drivers: soc: ti: knav_qmss_queue: Make knav_gp_range_ops static
    soc: ti: add k3 platforms chipid module driver
    dt-bindings: soc: ti: add binding for k3 platforms chipid module
    ...

    Linus Torvalds
     

28 May, 2020

1 commit

  • …eo/linux into arm/drivers

    NXP/FSL SoC driver updates for v5.8

    DPAA2 DPIO driver
    - Prefer the CPU affined DPIO

    QUICC Engine drivers
    - Replace one-element array and use struct_size() helper

    Cleanups in various drivers

    * tag 'soc-fsl-next-v5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/leo/linux:
    soc: fsl: dpio: Remove unused inline function qbman_write_eqcr_am_rt_register
    soc: fsl: qe: clean up an indentation issue
    soc: fsl: dpio: Prefer the CPU affine DPIO
    soc: fsl: qbman: Remove unused inline function qm_eqcr_get_ci_stashing
    soc: fsl: qe: Replace one-element array and use struct_size() helper
    treewide: Replace zero-length array with flexible-array

    Link: https://lore.kernel.org/r/20200527215740.9279-1-leoyang.li@nxp.com
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>

    Arnd Bergmann
     

23 May, 2020

5 commits

  • There's no callers in-tree anymore since commit
    3b2abda7d28c ("soc: fsl: dpio: Replace QMAN array mode with ring mode enqueue")

    Signed-off-by: YueHaibing
    Signed-off-by: Li Yang

    YueHaibing
     
  • There is a statement that not indented correctly, remove the
    extraneous space.

    Signed-off-by: Colin Ian King
    Signed-off-by: Li Yang

    Colin Ian King
     
  • Use the cpu affine DPIO unless there isn't one which can happen
    if less DPIOs than cores are assign to the kernel.

    Signed-off-by: Roy Pledge
    Signed-off-by: Ioana Ciornei
    Signed-off-by: Li Yang

    Roy Pledge
     
  • There's no callers in-tree anymore.

    Signed-off-by: YueHaibing
    Signed-off-by: Li Yang

    YueHaibing
     
  • The current codebase makes use of one-element arrays in the following
    form:

    struct something {
    int length;
    u8 data[1];
    };

    struct something *instance;

    instance = kmalloc(sizeof(*instance) + size, GFP_KERNEL);
    instance->length = size;
    memcpy(instance->data, source, size);

    but the preferred mechanism to declare variable-length types such as
    these ones is a flexible array member[1][2], introduced in C99:

    struct foo {
    int stuff;
    struct boo array[];
    };

    By making use of the mechanism above, we will get a compiler warning
    in case the flexible array does not occur last in the structure, which
    will help us prevent some kind of undefined behavior bugs from being
    inadvertently introduced[3] to the codebase from now on. So, replace
    the one-element array with a flexible-array member.

    Also, make use of the new struct_size() helper to properly calculate the
    size of struct qe_firmware.

    This issue was found with the help of Coccinelle and, audited and fixed
    _manually_.

    [1] https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
    [2] https://github.com/KSPP/linux/issues/21
    [3] commit 76497732932f ("cxgb3/l2t: Fix undefined behaviour")

    Signed-off-by: Gustavo A. R. Silva
    Reviewed-by: Qiang Zhao
    Signed-off-by: Li Yang

    Gustavo A. R. Silva
     

08 May, 2020

1 commit

  • Mask the consumer index before using it. Without this, we would be
    writing frame descriptors beyond the ring size supported by the QBMAN
    block.

    Fixes: 3b2abda7d28c ("soc: fsl: dpio: Replace QMAN array mode with ring mode enqueue")
    Signed-off-by: Ioana Ciornei
    Acked-by: Li Yang
    Signed-off-by: David S. Miller

    Ioana Ciornei
     

17 Apr, 2020

2 commits

  • A 1024 byte variable on the stack will warn on any 32-bit architecture
    during compile-testing, and is generally a bad idea anyway:

    fsl/dpio/dpio-service.c: In function 'dpaa2_io_service_enqueue_multiple_desc_fq':
    fsl/dpio/dpio-service.c:495:1: error: the frame size of 1032 bytes is larger than 1024 bytes [-Werror=frame-larger-than=]

    There are currently no callers of this function, so I cannot tell whether
    dynamic memory allocation is allowed once callers are added. Change
    it to kcalloc for now, if anyone gets a warning about calling this in
    atomic context after they start using it, they can fix it later.

    Link: https://lore.kernel.org/r/20200408185834.434784-1-arnd@arndb.de
    Fixes: 9d98809711ae ("soc: fsl: dpio: Adding QMAN multiple enqueue interface")
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     
  • Building dpio for 32 bit shows a new compiler warning from converting
    a pointer to a u64:

    drivers/soc/fsl/dpio/qbman-portal.c: In function 'qbman_swp_enqueue_multiple_desc_direct':
    drivers/soc/fsl/dpio/qbman-portal.c:870:14: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
    870 | addr_cena = (uint64_t)s->addr_cena;

    The variable is not used anywhere, so removing the assignment seems
    to be the correct workaround. After spotting what seemed to be
    some confusion about address spaces, I ran the file through sparse,
    which showed more warnings:

    drivers/soc/fsl/dpio/qbman-portal.c:756:42: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/dpio/qbman-portal.c:756:42: expected void const volatile [noderef] *addr
    drivers/soc/fsl/dpio/qbman-portal.c:756:42: got unsigned int [usertype] *[assigned] p
    drivers/soc/fsl/dpio/qbman-portal.c:902:42: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/dpio/qbman-portal.c:902:42: expected void const volatile [noderef] *addr
    drivers/soc/fsl/dpio/qbman-portal.c:902:42: got unsigned int [usertype] *[assigned] p

    Here, the problem is passing a token from memremap() into __raw_readl(),
    which is only defined to work on MMIO addresses but not RAM. Turning
    this into a simple pointer dereference avoids this warning as well.

    Link: https://lore.kernel.org/r/20200408185904.460563-1-arnd@arndb.de
    Fixes: 3b2abda7d28c ("soc: fsl: dpio: Replace QMAN array mode with ring mode enqueue")
    Signed-off-by: Arnd Bergmann

    Arnd Bergmann
     

04 Apr, 2020

1 commit

  • Pull ARM driver updates from Arnd Bergmann:
    "These are the usual updates for SoC specific device drivers and
    related subsystems that don't have their own top-level maintainers:

    - ARM SCMI/SCPI updates to allow pluggable transport layers

    - TEE subsystem cleanups

    - A new driver for the Amlogic secure power domain controller

    - Various driver updates for the NXP Layerscape DPAA2, NXP i.MX SCU
    and TI OMAP2+ sysc drivers.

    - Qualcomm SoC driver updates, including a new library module for
    "protection domain" notifications

    - Lots of smaller bugfixes and cleanups in other drivers"

    * tag 'arm-drivers-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (70 commits)
    soc: fsl: qe: fix sparse warnings for ucc_slow.c
    soc: fsl: qe: ucc_slow: remove 0 assignment for kzalloc'ed structure
    soc: fsl: qe: fix sparse warnings for ucc_fast.c
    soc: fsl: qe: fix sparse warnings for qe_ic.c
    soc: fsl: qe: fix sparse warnings for ucc.c
    soc: fsl: qe: fix sparse warning for qe_common.c
    soc: fsl: qe: fix sparse warnings for qe.c
    soc: qcom: Fix QCOM_APR dependencies
    soc: qcom: pdr: Avoid uninitialized use of found in pdr_indication_cb
    soc: imx: drop COMPILE_TEST for IMX_SCU_SOC
    firmware: imx: add COMPILE_TEST for IMX_SCU driver
    soc: imx: gpc: fix power up sequencing
    soc: imx: increase build coverage for imx8m soc driver
    soc: qcom: apr: Add avs/audio tracking functionality
    dt-bindings: soc: qcom: apr: Add protection domain bindings
    soc: qcom: Introduce Protection Domain Restart helpers
    devicetree: bindings: firmware: add ipq806x to qcom_scm
    memory: tegra: Correct debugfs clk rate-range on Tegra124
    memory: tegra: Correct debugfs clk rate-range on Tegra30
    memory: tegra: Correct debugfs clk rate-range on Tegra20
    ...

    Linus Torvalds
     

25 Mar, 2020

6 commits

  • Fixes the following sparse warnings, some of these endian issues are
    real issues that need to be fixed.

    drivers/soc/fsl/qe/ucc_slow.c:78:17: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:78:17: expected struct ucc_slow *us_regs
    drivers/soc/fsl/qe/ucc_slow.c:78:17: got struct ucc_slow [noderef] *us_regs
    drivers/soc/fsl/qe/ucc_slow.c:81:18: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:81:18: expected void const volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:81:18: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:90:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:90:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:90:9: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:99:17: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:99:17: expected struct ucc_slow *us_regs
    drivers/soc/fsl/qe/ucc_slow.c:99:17: got struct ucc_slow [noderef] *us_regs
    drivers/soc/fsl/qe/ucc_slow.c:102:18: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:102:18: expected void const volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:102:18: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:111:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:111:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:111:9: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:172:28: warning: Using plain integer as NULL pointer
    drivers/soc/fsl/qe/ucc_slow.c:174:25: warning: cast removes address space '' of expression
    drivers/soc/fsl/qe/ucc_slow.c:175:25: warning: cast removes address space '' of expression
    drivers/soc/fsl/qe/ucc_slow.c:194:23: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:194:23: expected struct ucc_slow_pram *us_pram
    drivers/soc/fsl/qe/ucc_slow.c:194:23: got void [noderef] *
    drivers/soc/fsl/qe/ucc_slow.c:204:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:204:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:204:9: got restricted __be16 *
    drivers/soc/fsl/qe/ucc_slow.c:229:41: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:229:41: expected struct qe_bd *tx_bd
    drivers/soc/fsl/qe/ucc_slow.c:229:41: got void [noderef] *
    drivers/soc/fsl/qe/ucc_slow.c:232:17: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:232:17: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:232:17: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:234:17: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:234:17: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:234:17: got unsigned int [usertype] *
    drivers/soc/fsl/qe/ucc_slow.c:238:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:238:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:238:9: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:239:9: warning: cast from restricted __be32
    drivers/soc/fsl/qe/ucc_slow.c:239:9: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/ucc_slow.c:239:9: expected unsigned int [usertype] val
    drivers/soc/fsl/qe/ucc_slow.c:239:9: got restricted __be32 [usertype]
    drivers/soc/fsl/qe/ucc_slow.c:239:9: warning: cast from restricted __be32
    drivers/soc/fsl/qe/ucc_slow.c:239:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:239:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:239:9: got unsigned int [usertype] *
    drivers/soc/fsl/qe/ucc_slow.c:242:26: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:242:26: expected struct qe_bd *rx_bd
    drivers/soc/fsl/qe/ucc_slow.c:242:26: got void [noderef] *
    drivers/soc/fsl/qe/ucc_slow.c:245:17: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:245:17: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:245:17: got unsigned int [usertype] *
    drivers/soc/fsl/qe/ucc_slow.c:247:17: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:247:17: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:247:17: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:251:9: warning: cast from restricted __be32
    drivers/soc/fsl/qe/ucc_slow.c:251:9: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/ucc_slow.c:251:9: expected unsigned int [usertype] val
    drivers/soc/fsl/qe/ucc_slow.c:251:9: got restricted __be32 [usertype]
    drivers/soc/fsl/qe/ucc_slow.c:251:9: warning: cast from restricted __be32
    drivers/soc/fsl/qe/ucc_slow.c:251:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:251:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:251:9: got unsigned int [usertype] *
    drivers/soc/fsl/qe/ucc_slow.c:252:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:252:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:252:9: got restricted __be32 *
    drivers/soc/fsl/qe/ucc_slow.c:276:39: warning: mixing different enum types:
    drivers/soc/fsl/qe/ucc_slow.c:276:39: unsigned int enum ucc_slow_tx_oversampling_rate
    drivers/soc/fsl/qe/ucc_slow.c:276:39: unsigned int enum ucc_slow_rx_oversampling_rate
    drivers/soc/fsl/qe/ucc_slow.c:296:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:296:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:296:9: got restricted __be16 *
    drivers/soc/fsl/qe/ucc_slow.c:297:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc_slow.c:297:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc_slow.c:297:9: got restricted __be16 *

    Signed-off-by: Li Yang

    Li Yang
     
  • Not necessary to set to 0 for the kzalloc'ed area so remove these
    assignements.

    Signed-off-by: Li Yang

    Li Yang
     
  • Fixes the following sparse warnings:

    drivers/soc/fsl/qe/qe_ic.c:253:32: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:253:32: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:253:32: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:254:26: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:254:26: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:254:26: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:269:32: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:269:32: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:269:32: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:270:26: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:270:26: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:270:26: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:341:31: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:341:31: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:341:31: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:357:31: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:357:31: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:357:31: got unsigned int [noderef] [usertype] *regs
    drivers/soc/fsl/qe/qe_ic.c:450:26: warning: incorrect type in argument 1 (different base types)
    drivers/soc/fsl/qe/qe_ic.c:450:26: expected restricted __be32 [noderef] [usertype] *base
    drivers/soc/fsl/qe/qe_ic.c:450:26: got unsigned int [noderef] [usertype] *regs

    Signed-off-by: Li Yang
    Reviewed-by: Rasmus Villemoes

    Li Yang
     
  • Fixes the following sparse warnings:

    drivers/soc/fsl/qe/ucc.c:637:20: warning: incorrect type in assignment (different address spaces)
    drivers/soc/fsl/qe/ucc.c:637:20: expected struct qe_mux *qe_mux_reg
    drivers/soc/fsl/qe/ucc.c:637:20: got struct qe_mux [noderef] *
    drivers/soc/fsl/qe/ucc.c:652:9: warning: incorrect type in argument 1 (different address spaces)
    drivers/soc/fsl/qe/ucc.c:652:9: expected void const volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc.c:652:9: got restricted __be32 *
    drivers/soc/fsl/qe/ucc.c:652:9: warning: incorrect type in argument 2 (different address spaces)
    drivers/soc/fsl/qe/ucc.c:652:9: expected void volatile [noderef] *addr
    drivers/soc/fsl/qe/ucc.c:652:9: got restricted __be32 *

    Signed-off-by: Li Yang
    Reviewed-by: Rasmus Villemoes

    Li Yang
     
  • Fixes the following sparse warning:

    drivers/soc/fsl/qe/qe_common.c:75:48: warning: incorrect type in argument 2 (different base types)
    drivers/soc/fsl/qe/qe_common.c:75:48: expected restricted __be32 const [usertype] *addr
    drivers/soc/fsl/qe/qe_common.c:75:48: got unsigned int *

    Signed-off-by: Li Yang
    Reviewed-by: Rasmus Villemoes

    Li Yang
     
  • Fixes the following sparse warnings:
    drivers/soc/fsl/qe/qe.c:426:9: warning: cast to restricted __be32
    drivers/soc/fsl/qe/qe.c:528:41: warning: incorrect type in assignment (different base types)
    drivers/soc/fsl/qe/qe.c:528:41: expected unsigned long long static [addressable] [toplevel] [usertype] extended_modes
    drivers/soc/fsl/qe/qe.c:528:41: got restricted __be64 const [usertype] extended_modes

    Signed-off-by: Li Yang

    Li Yang
     

11 Mar, 2020

1 commit

  • The dpio irqs must be registered when you can actually
    receive interrupts, ie when the dpios are created.
    Kernel goes through NULL pointer dereference errors
    followed by kernel panic [1] because the dpio irqs are
    enabled before the dpio is created.

    [1]
    Unable to handle kernel NULL pointer dereference at virtual address 0040
    fsl_mc_dpio dpio.14: probed
    fsl_mc_dpio dpio.13: Adding to iommu group 11
    ISV = 0, ISS = 0x00000004
    Unable to handle kernel NULL pointer dereference at virtual address 0040
    Mem abort info:
    ESR = 0x96000004
    EC = 0x25: DABT (current EL), IL = 32 bits
    SET = 0, FnV = 0
    EA = 0, S1PTW = 0
    Data abort info:
    ISV = 0, ISS = 0x00000004
    CM = 0, WnR = 0
    [0000000000000040] user address but active_mm is swapper
    Internal error: Oops: 96000004 [#1] PREEMPT SMP
    Modules linked in:
    CPU: 2 PID: 151 Comm: kworker/2:1 Not tainted 5.6.0-rc4-next-20200304 #1
    Hardware name: NXP Layerscape LX2160ARDB (DT)
    Workqueue: events deferred_probe_work_func
    pstate: 00000085 (nzcv daIf -PAN -UAO)
    pc : dpaa2_io_irq+0x18/0xe0
    lr : dpio_irq_handler+0x1c/0x28
    sp : ffff800010013e20
    x29: ffff800010013e20 x28: ffff0026d9b4c140
    x27: ffffa1d38a142018 x26: ffff0026d2953400
    x25: ffffa1d38a142018 x24: ffffa1d38a7ba1d8
    x23: ffff800010013f24 x22: 0000000000000000
    x21: 0000000000000072 x20: ffff0026d2953400
    x19: ffff0026d2a68b80 x18: 0000000000000001
    x17: 000000002fb37f3d x16: 0000000035eafadd
    x15: ffff0026d9b4c5b8 x14: ffffffffffffffff
    x13: ff00000000000000 x12: 0000000000000038
    x11: 0101010101010101 x10: 0000000000000040
    x9 : ffffa1d388db11e4 x8 : ffffa1d38a7e40f0
    x7 : ffff0026da414f38 x6 : 0000000000000000
    x5 : ffff0026da414d80 x4 : ffff5e5353d0c000
    x3 : ffff800010013f60 x2 : ffffa1d388db11c8
    x1 : ffff0026d2a67c00 x0 : 0000000000000000
    Call trace:
    dpaa2_io_irq+0x18/0xe0
    dpio_irq_handler+0x1c/0x28
    __handle_irq_event_percpu+0x78/0x2c0
    handle_irq_event_percpu+0x38/0x90
    handle_irq_event+0x4c/0xd0
    handle_fasteoi_irq+0xbc/0x168
    generic_handle_irq+0x2c/0x40
    __handle_domain_irq+0x68/0xc0
    gic_handle_irq+0x64/0x150
    el1_irq+0xb8/0x180
    _raw_spin_unlock_irqrestore+0x14/0x48
    irq_set_affinity_hint+0x6c/0xa0
    dpaa2_dpio_probe+0x2a4/0x518
    fsl_mc_driver_probe+0x28/0x70
    really_probe+0xdc/0x320
    driver_probe_device+0x5c/0xf0
    __device_attach_driver+0x88/0xc0
    bus_for_each_drv+0x7c/0xc8
    __device_attach+0xe4/0x140
    device_initial_probe+0x18/0x20
    bus_probe_device+0x98/0xa0
    device_add+0x41c/0x758
    fsl_mc_device_add+0x184/0x530
    dprc_scan_objects+0x280/0x370
    dprc_probe+0x124/0x3b0
    fsl_mc_driver_probe+0x28/0x70
    really_probe+0xdc/0x320
    driver_probe_device+0x5c/0xf0
    __device_attach_driver+0x88/0xc0
    bus_for_each_drv+0x7c/0xc8
    __device_attach+0xe4/0x140
    device_initial_probe+0x18/0x20
    bus_probe_device+0x98/0xa0
    deferred_probe_work_func+0x74/0xa8
    process_one_work+0x1c8/0x470
    worker_thread+0x1f8/0x428
    kthread+0x124/0x128
    ret_from_fork+0x10/0x18
    Code: a9bc7bfd 910003fd a9025bf5 a90363f7 (f9402015)
    ---[ end trace 38298e1a29e7a570 ]---
    Kernel panic - not syncing: Fatal exception in interrupt
    SMP: stopping secondary CPUs
    Mem abort info:
    ESR = 0x96000004
    CM = 0, WnR = 0
    EC = 0x25: DABT (current EL), IL = 32 bits
    [0000000000000040] user address but active_mm is swapper
    SET = 0, FnV = 0
    EA = 0, S1PTW = 0
    Data abort info:
    ISV = 0, ISS = 0x00000004
    CM = 0, WnR = 0
    [0000000000000040] user address but active_mm is swapper
    SMP: failed to stop secondary CPUs 0-2
    Kernel Offset: 0x21d378600000 from 0xffff800010000000
    PHYS_OFFSET: 0xffffe92180000000
    CPU features: 0x10002,21806008
    Memory Limit: none
    ---[ end Kernel panic - not syncing: Fatal exception in interrupt ]---

    Signed-off-by: Laurentiu Tudor
    Signed-off-by: Grigore Popescu
    Signed-off-by: Li Yang

    Grigore Popescu
     

22 Feb, 2020

1 commit

  • Pointer p is currently being dereferenced before it is null
    checked on a memory allocation failure check. Fix this by
    checking if p is null before dereferencing it.

    Addresses-Coverity: ("Dereference before null check")
    Fixes: 3b2abda7d28c ("soc: fsl: dpio: Replace QMAN array mode with ring mode enqueue")
    Signed-off-by: Colin Ian King
    Signed-off-by: Li Yang

    Colin Ian King
     

20 Feb, 2020

2 commits