Route removal is handled by two code paths. The main removal path is via
fib6_del_route() which will handle purging any PMTU exceptions from the
cache, removing all per-cpu copies of the DST entry used by the route, and
releasing the fib6_info struct.
The second removal location is during fib6_add_rt2node() during a route
replacement operation. This path also calls fib6_purge_rt() to handle
cleaning up the per-cpu copies of the DST entries and releasing the
fib6_info associated with the older route, but it does not flush any PMTU
exceptions that the older route had. Since the older route is removed from
the tree during the replacement, we lose any way of accessing it again.
As these lingering DSTs and the fib6_info struct are holding references to
the underlying netdevice struct as well, unregistering that device from the
kernel can never complete.
Change-Id: I9df223ea065379a6e812a88dbc4ed28a26ee62dd
Signed-off-by: Sean Tranchetti <stranche@codeaurora.org>
The adreno_cmdbatch_retired tracepoint originally used the string
"ctx_prio". This changed when adding dispatch on GMU support to
"prio". Changing this back to the original so that external parsers
are not impacted.
Change-Id: I89010509ac4cc0db03fcdee302bbe28db604f66c
Signed-off-by: Sushmita Susheelendra <ssusheel@codeaurora.org>
Adaptive Clock Distribution (ACD) is a power saving feature
to mitigate voltage droops.
Change-Id: Ic2517010726caa33f3e9d08ed7bd66466bead730
Signed-off-by: Deepak Kumar <dkumar@codeaurora.org>
For no DRV connected platform, it will reject to suspend pci since
DISABLE_DRV bit isn't set. So check both flags firstly before suspend
pci.
Change-Id: Ifc3de23def6537165f69dd6ca07da9f57f136607
Signed-off-by: Wu Gao <wugao@codeaurora.org>
During error scenarios, while error handler is
in middle of resetting the host controller, we
might get a line reset which may result isr handler
trying to access UFS register. But since controller
is in reset state, SW won't have access to controller
register which will lead to noc error.
Change-Id: I5aab4dba1b12be9473bd91764307e16b7ef2f279
Signed-off-by: Nitin Rawat <nitirawa@codeaurora.org>
PCIE clocks are not controlled from HLOS in YUPIK. But in order
to measure them from HLOS, update all PCIE clocks to measure only.
Change-Id: I8749032c187694bb57bf89feccf129fd4c6b7299
Signed-off-by: Jagadeesh Kona <jkona@codeaurora.org>
Certain GPIOs are reserved for secure world and cannot be accessed by HLOS.
Supply "reserved_gpios" to msm_pinctrl to mark these pins as invalid.
Change-Id: I7ff8444af2819a68c60e66bd4e4e9f5ecf4990fa
Signed-off-by: Naina Mehta <nainmeht@codeaurora.org>
Add delay for pci link training retries during pci resume
done for pci link recovery.
Change-Id: Idb32ec833dbf5828afecaafb7197c3f40529a839
Signed-off-by: Mohammed Siddiq <msiddiq@codeaurora.org>
It cannot be guaranteed that certain legacy mode controllers stay
in M0 while a BW request is being processed. Ensure that those
pending BW requests are addressed when M0 entry occurs after a BW
request is processed but not responded to.
Change-Id: I6132116fae76fa10477aa7061c24f3ff5ac60a34
Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
While trusted touch is underway, block resume work
to flush touch FIFO since ownership of register space
is with Trusted VM.
Change-Id: Ib87a81aa8f39631ae3f3ea44f4a5dee4563bc514
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
Release I2C session lock before releasing IO regions in TVM
during trusted touch scenario.
Change-Id: Ibd3b63e5d084097eb464e3697b8d7d82ea17262e
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
Add Trusted touch support to nt36xxx Touchscreen driver.
This feature enables driver to operate in trusted touch
mode in trusted virtual machine(TVM). The primary virtual
machine(PVM) lends resources such as IO memory and touch
irq to TVM prior to trusted touch is initiated and
reclaims those resources back after trusted touch usecase
finishes. The resource requirements of TVM such as clock,
regulators etc are taken care by PVM. Introduce state
machine for various checkpoints in trusted touch usecase.
In error scenarios, this state machine helps driver to
rollback to previous state.
Change-Id: I5000ba016cee21c7b6b6beab8a7bb15a8c23f8d5
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
Enable Display and debug clock controllers for YUPIK.
Change-Id: I1d458d091c57011f6e9780956769051b4760eb18
Signed-off-by: Jagadeesh Kona <jkona@codeaurora.org>
Add debug clock controller to support measure functionality for
all clock controllers.
Change-Id: I45d097d077c50efcde3d4a31b3b601deab9c1059
Signed-off-by: Jagadeesh Kona <jkona@codeaurora.org>
Add the display clock controller to support display port
related branches, PLLs and RCGs.
Change-Id: I3b9c15e1eab364250300d1ff9121285a044ced2e
Signed-off-by: Jagadeesh Kona <jkona@codeaurora.org>
SMB1351 does not have a USB_ID detection logic. Add support
for handling the ID detection over a dedicated GPIO.
Change-Id: Iadaf9344ab00bec1b173516a5004187e98e89302
Signed-off-by: Kavya Nunna <knunna@codeaurora.org>
If get_acc_dev() fails to obtain a reference to the current device,
acc_disconnect() will attempt to put_acc_dev() with the resulting NULL
pointer, leading to a crash:
| Unable to handle kernel NULL pointer dereference at virtual address 00000074
| [...]
| [<c0abb288>] (acc_disconnect) from [<c0a91a38>] (android_disconnect+0x1c/0x7c)
| [<c0a91a38>] (android_disconnect) from [<c0a93958>] (usb_gadget_udc_reset+0x10/0x34)
| [<c0a93958>] (usb_gadget_udc_reset) from [<c0a4a9c4>] (dwc3_gadget_reset_interrupt+0x88/0x4fc)
| [<c0a4a9c4>] (dwc3_gadget_reset_interrupt) from [<c0a491f8>] (dwc3_process_event_buf+0x60/0x3e4)
| [<c0a491f8>] (dwc3_process_event_buf) from [<c0a49180>] (dwc3_thread_interrupt+0x24/0x3c)
| [<c0a49180>] (dwc3_thread_interrupt) from [<c02b3404>] (irq_thread_fn+0x1c/0x58)
| [<c02b3404>] (irq_thread_fn) from [<c02b326c>] (irq_thread+0x1ec/0x2f4)
| [<c02b326c>] (irq_thread) from [<c0260804>] (kthread+0x1a8/0x1ac)
| [<c0260804>] (kthread) from [<c0200138>] (ret_from_fork+0x14/0x3c)
Follow the pattern used elsewhere, and return early if we fail to obtain
a reference.
Bug: 173789633
Reported-by: YongQin Liu <yongqin.liu@linaro.org>
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I37a2bff5bc1b6b8269788d08191181763bf0e896
Signed-off-by: Giuliano Procida <gprocida@google.com>
Using bitfields for shared variables is a "bad idea", as they require
a non-atomic read-modify-write to be generated by the compiler, which can
cause updates to unrelated bits in the same word to disappear.
Ensure the 'online' and 'disconnected' members of 'struct acc_dev' are
placed in separate variables by declaring them each as 'int'.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: Ia6031d82a764e83b2cc3502fbe5fb273511da752
Signed-off-by: Giuliano Procida <gprocida@google.com>
Tearing down and freeing the 'acc_dev' structure when there is
potentially asynchronous work queued involving its member fields is
likely to lead to use-after-free issues.
Cancel any pending work before freeing the structure.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I68a91274aea18034637b738d558d043ac74fadf4
Signed-off-by: Giuliano Procida <gprocida@google.com>
If acc_setup() is called when there is already an allocated instance,
misc_register() will fail but the error path leaves a dangling pointer
to freed memory in the global 'acc_dev' state.
Fix this by ensuring that the refcount is zero before we start, and then
using a cmpxchg() from NULL to serialise any concurrent initialisers.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I2c26289dcce7dbc493964516c49b05d04aaa6839
Signed-off-by: Giuliano Procida <gprocida@google.com>
acc_release() attempts to synchronise with acc_open() using an atomic
'open_excl' member in 'struct acc_dev'. Unfortunately, acc_release()
prematurely resets this atomic variable to zero, meaning there is a
potential race on 'dev->disconnected':
acc_open() acc_release()
atomic_xchg(open_excl), 0)
atomic_xchg(open_excl, 1)
dev->disconnected = 0; dev->disconnected = 1;
Fix the race by ensuring that the 'disconnected' field is written
before clearing 'open_excl' in acc_release().
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: Ib9a21f2305f6d70de3e760da62dbfdd66889200a
Signed-off-by: Giuliano Procida <gprocida@google.com>
Add refcounting to track the lifetime of the global 'acc_dev' structure,
as the underlying function directories can be removed while references
still exist to the dev node.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I248408e890d01167706c329146d63b64a6456df6
Signed-off-by: Giuliano Procida <gprocida@google.com>
The '_acc_dev' global variable is a fancy use-after-free factory. Wrap
it in some get()/put() functions in preparation for introducing some
refcounting.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I4c839627648c209341a81efa0c001c8d71b878d4
Signed-off-by: Giuliano Procida <gprocida@google.com>
acc_alloc_inst() assigns to a local 'dev' variable, but then never uses
it. Remove the redundant assignment, and the local variable along with
it.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: Ide9c2e89fb12b846eb8739b302d1b742fc7eb6b5
Signed-off-by: Giuliano Procida <gprocida@google.com>
Remove some useless print statements, as they can trivially be used to
spam the console and don't report anything meaningful.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: I28052010fc3ec033a2c99efeb3f6c919d54d75c2
Signed-off-by: Giuliano Procida <gprocida@google.com>
Neither acc_gadget_bind() nor acc_gadget_register_driver() exist, so
remove the stale comments that refer to them.
Bug: 173789633
Signed-off-by: Will Deacon <willdeacon@google.com>
Change-Id: If396ba3bcac3ca59c48e5a5faa0a8520534ed625
Signed-off-by: Giuliano Procida <gprocida@google.com>
In case of poweroff charging mode, accessory function instance
is not created and due to this, _acc_dev will be NULL. If target
is connected to Accessory dock in poweroff charging mode, there
is a chance dev pointer is accessed, which is NULL. Hence add a
check before processing control request and return error if it is
NULL.
Bug: 141002587
Change-Id: I4f1deb9d764b8c0bd1d7837cbc43a2933167f568
Signed-off-by: Vijayavardhan Vennapusa <vvreddy@codeaurora.org>
Signed-off-by: Jack Pham <jackp@codeaurora.org>
Signed-off-by: Giuliano Procida <gprocida@google.com>
Replace existing non standard power supply properties with standard power
supply properties to make the smb1351 driver GKI complaint.
Change-Id: Iec18b6f267c30739928d85fd10ca676b17102a11
Signed-off-by: Kavya Nunna <knunna@codeaurora.org>
Enable service locator and service notifier on gen3auto.
Change-Id: Ida4e037808c50fca8096fba8d24e16c5a4af6bb3
Signed-off-by: Shreyas K K <shrekk@codeaurora.org>
Enable PIL, SSR and related drivers to load firmware
images for other subsystems and send out notifications
about subsystem states.
Change-Id: Ic85175ddf17486e21427dc1c8540b8016ca6aa9e
Signed-off-by: Vivek Kumar <vivekuma@codeaurora.org>
Signed-off-by: Shreyas K K <shrekk@codeaurora.org>
When memdesc_sg_virt returns error in kgsl_setup_anon_useraddr function,
the gpu address registered in SVM region will not be deregistered.
This change deregisters the gpu address on memdesc_sg_virt failure.
Change-Id: Ic99167e283a0c6331bb9f5f0b608b6cdb3c918e4
Signed-off-by: Neeraja P <neerp@codeaurora.org>
Add driver name in debug log for support other team
debug driver.
Change-Id: I007f42fd03bc308d77e29fa2df1693ce46c8fd37
Signed-off-by: Tengfei Fan <tengfeif@codeaurora.org>
qsmmuv500_iova_to_phys checks for out of bound iova and skips ECATS
operations. While this is optimal, this also skips resuming stalled CB.
As part of S1 context fault handling iova_to_phys is followed by tlb
invalidation and sync. With context bank in stall state, the sync
operation will timeout.
Example:
arm-smmu: FAR = 0x000102325429beb4
arm-smmu: PAR = 0x0000000000000000
arm-smmu: FSR = 0x40000402 [TF R SS ]
arm-smmu: ECATS: address out of bounds: 0x000102325429beb4
arm-smmu: ECATS: address out of bounds: 0x000102325429beb4
arm-smmu: TLB sync timed out -- SMMU may be deadlocked
Call trace:
qsmmuv500_tlb_sync_timeout+0x360
__arm_smmu_tlb_sync+0x2b4
arm_smmu_tlb_sync_context+0x4c
arm_smmu_tlb_inv_context_s1+0x1ec
arm_smmu_context_fault+0xb84
irq_thread_fn+0x44
irq_thread+0x160
kthread+0x16c
ret_from_fork+0x10
Fix this by resuming the context bank before bailing out for out of bound
iova.
Change-Id: I754b38a3761869a5f0c00688211d26f1b0f47eec
Signed-off-by: Prakash Gupta <guptap@codeaurora.org>
For DSI byte clock RCG, check if there is a change in existing
settings before updating RCG configuration. This is needed to
avoid glitch on the display panel when there is a change in the
DSI byte clock frequency with display enabled.
Change-Id: I8ef0331cbb466b399cd12199b4d335ed44997dbc
Signed-off-by: Padmanabhan Komanduru <pkomandu@codeaurora.org>
Signed-off-by: Ritesh Kumar <riteshk@codeaurora.org>
Signed-off-by: Zhao, Yuan <yzhao@codeaurora.org>
Currently if CONFIG_CNSS2_DEBUG is not enabled, driver won't collect
FW dump even there is a FW assert during shutdown. This can result
lose FW dump since device will be powered off. Fix it by collecting
dump always in such scenario.
Change-Id: Iedaf7c48f9b622fb4a5215178027467adda58ef8
Signed-off-by: Yue Ma <yuem@codeaurora.org>
Commit 29c41d5c47 ("regulator: rpmh-regulator: support parent
supply specification in subnodes") introduced a memory leak in
the function rpmh_regulator_init_vreg_supply() due to 'buf' not
being freed in the new 'else if' statement. Fix this memory leak
by freeing 'buf' correctly.
Change-Id: If2748b595d8ae3a4564a2956a67aeda476975309
Signed-off-by: David Collins <collinsd@codeaurora.org>
Henceforth, l3 clock is scaled using icc api instead
of the clock api.
Change-Id: I0de3250ed402b940dfb5991ea837edb98734529a
Signed-off-by: Harshdeep Dhatt <hdhatt@codeaurora.org>