KVM: arm64: Introduce pKVM hyp VM and vCPU state at EL2
Will Deacon
maintainerv3 cover KVM: arm64: Introduce pKVM hyp VM and vCPU state at EL2
Hi folks,
This is v3 of the series previously posted here:
Mega-series: https://lore.kernel.org/kvmarm/[email protected]/
v2: https://lore.kernel.org/all/[email protected]/
There have been some significant changes since v2, including:
- Removal of unnecessary backpointer linking a hyp vCPU to its hyp VM in favour of container_of()
- Removing confusing use of 'shadow' at EL2 in favour of 'pkvm_hyp' (although this was much more work than a simple sed expression!)
- Simplified vm table lookup and removal of redundant table traversal
- Rework of the hypervisor fixmap to avoid redundant page-table walks
- Splitting of memory donations required to create a guest so that the requirement for physically-contiguous pages is reduced
- Fixed a memory leak when the stage-2 pgd is configured with an unsupported size
- Dropped rework of 'struct hyp_page' as it is not required by this series
- Improved commit messages
- Rebased onto v6.0-rc1
Oliver -- as discussed in person, I've left the owner ID enumeration where it is for now since we will need to track the guest *instance* in future and so consolidating this into the pgtable code is unlikely to be beneficial.
As with the previous posting, the last patch is marked as RFC because, although it plumbs in the shadow state, it is woefully inefficient and copies to/from the host state on every vCPU run. Without the last patch, the new structures are unused but we move considerably closer to isolating guests from the host.
Cheers,
Will, Quentin, Fuad and Marc
--->8
Fuad Tabba (3):
KVM: arm64: Add hyp_spinlock_t static initializer
KVM: arm64: Add infrastructure to create and track pKVM instances at
EL2
KVM: arm64: Instantiate pKVM hypervisor VM and vCPU structures from
EL1Quentin Perret (15):
KVM: arm64: Move hyp refcount manipulation helpers to common header
file
KVM: arm64: Allow attaching of non-coalescable pages to a hyp pool
KVM: arm64: Back the hypervisor 'struct hyp_page' array for all memory
KVM: arm64: Fix-up hyp stage-1 refcounts for all pages mapped at EL2
KVM: arm64: Implement do_donate() helper for donating memory
KVM: arm64: Prevent the donation of no-map pages
KVM: arm64: Add helpers to pin memory shared with the hypervisor at
EL2
KVM: arm64: Add per-cpu fixmap infrastructure at EL2
KVM: arm64: Add generic hyp_memcache helpers
KVM: arm64: Consolidate stage-2 initialisation into a single function
KVM: arm64: Instantiate guest stage-2 page-tables at EL2
KVM: arm64: Return guest memory from EL2 via dedicated teardown
memcache
KVM: arm64: Unmap 'kvm_arm_hyp_percpu_base' from the host
KVM: arm64: Explicitly map 'kvm_vgic_global_state' at EL2
KVM: arm64: Don't unnecessarily map host kernel sections at EL2
Will Deacon (7):
KVM: arm64: Unify identifiers used to distinguish host and hypervisor
KVM: arm64: Include asm/kvm_mmu.h in nvhe/mem_protect.h
KVM: arm64: Rename 'host_kvm' to 'host_mmu'
KVM: arm64: Initialise hypervisor copies of host symbols
unconditionally
KVM: arm64: Provide I-cache invalidation by virtual address at EL2
KVM: arm64: Maintain a copy of 'kvm_arm_vmid_bits' at EL2
KVM: arm64: Use the pKVM hyp vCPU structure in handle___kvm_vcpu_run()
arch/arm64/include/asm/kvm_arm.h | 2 +- arch/arm64/include/asm/kvm_asm.h | 7 +- arch/arm64/include/asm/kvm_host.h | 73 ++- arch/arm64/include/asm/kvm_hyp.h | 3 + arch/arm64/include/asm/kvm_mmu.h | 2 +- arch/arm64/include/asm/kvm_pgtable.h | 20 + arch/arm64/include/asm/kvm_pkvm.h | 38 ++ arch/arm64/kernel/image-vars.h | 15 - arch/arm64/kvm/arm.c | 61 ++- arch/arm64/kvm/hyp/hyp-constants.c | 3 + arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 25 +- arch/arm64/kvm/hyp/include/nvhe/memory.h | 23 + arch/arm64/kvm/hyp/include/nvhe/mm.h | 18 +- arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 74 +++ arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 10 +- arch/arm64/kvm/hyp/nvhe/cache.S | 11 + arch/arm64/kvm/hyp/nvhe/hyp-main.c | 110 +++- arch/arm64/kvm/hyp/nvhe/hyp-smp.c | 2 + arch/arm64/kvm/hyp/nvhe/mem_protect.c | 502 ++++++++++++++++-- arch/arm64/kvm/hyp/nvhe/mm.c | 158 +++++- arch/arm64/kvm/hyp/nvhe/page_alloc.c | 28 +- arch/arm64/kvm/hyp/nvhe/pkvm.c | 444 ++++++++++++++++ arch/arm64/kvm/hyp/nvhe/setup.c | 96 ++-- arch/arm64/kvm/hyp/pgtable.c | 21 +- arch/arm64/kvm/mmu.c | 55 +- arch/arm64/kvm/pkvm.c | 138 ++++- arch/arm64/kvm/reset.c | 29 - 27 files changed, 1752 insertions(+), 216 deletions(-) create mode 100644 arch/arm64/kvm/hyp/include/nvhe/pkvm.h
Signature · 1 line
2.37.2.789.g6183377224-goog
Will Deacon
maintainerPATCH v3 1/25 KVM: arm64: Move hyp refcount manipulation helpers to common header file
From: Quentin Perret <[email protected]>
We will soon need to manipulate 'struct hyp_page' refcounts from outside page_alloc.c, so move the helpers to a common header file to allow them to be reused easily.
--- arch/arm64/kvm/hyp/include/nvhe/memory.h | 18 ++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/page_alloc.c | 19 ------------------- 2 files changed, 18 insertions(+), 19 deletions(-)
arch/arm64/kvm/hyp/include/nvhe/memory.h +18 -0
@@ -45,4 +45,22 @@ static inline int hyp_page_count(void *addr) return p->refcount; } +static inline void hyp_page_ref_inc (struct hyp_page *p) +{ +BUG_ON (p->refcount ==USHRT_MAX ); + p->refcount++; +} + +static inline int hyp_page_ref_dec_and_test (struct hyp_page *p) +{ +BUG_ON (!p->refcount); + p->refcount--; +return (p->refcount ==0 ); +} + +static inline void hyp_set_page_refcounted (struct hyp_page *p) +{ +BUG_ON (p->refcount); + p->refcount =1 ; +}#endif /* __KVM_HYP_MEMORY_H */
arch/arm64/kvm/hyp/nvhe/page_alloc.c +0 -19
@@ -144,25 +144,6 @@ static struct hyp_page *__hyp_extract_page(struct hyp_pool *pool,return p; } -static inline void hyp_page_ref_inc (struct hyp_page *p) -{ -BUG_ON (p->refcount ==USHRT_MAX ); - p->refcount++; -} - -static inline int hyp_page_ref_dec_and_test (struct hyp_page *p) -{ -BUG_ON (!p->refcount); - p->refcount--; -return (p->refcount ==0 ); -} - -static inline void hyp_set_page_refcounted (struct hyp_page *p) -{ -BUG_ON (p->refcount); - p->refcount =1 ; -} -static void __hyp_put_page (struct hyp_pool *pool,struct hyp_page *p) {if (hyp_page_ref_dec_and_test (p))
Signature · 1 line
2.37.2.789.g6183377224-goog
Re: [PATCH v3 01/25] KVM: arm64: Move hyp refcount manipulation helpers to common header file
Hi Will,
Quoted 29 lines · Will Deacon
From: Quentin Perret <[email protected]>
We will soon need to manipulate 'struct
hyp_page' refcounts from outsidepage_alloc.c, so move the helpers to a common header file to allow them to be reused easily.Signed-off-by Quentin Perret <[email protected]>Signed-off-by Will Deacon <[email protected]>--- arch/arm64/kvm/hyp/include/nvhe/memory.h | 18 ++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/page_alloc.c | 19 ------------------- 2 files changed, 18 insertions(+), 19 deletions(-)arch/arm64/kvm/hyp/include/nvhe/memory.h +8
-0@@ -45,4 +45,22 @@ static inline int hyp_page_count(void *addr)return p->refcount; } +static inline void hyp_page_ref_inc (struct hyp_page *p) +{ +BUG_ON (p->refcount ==USHRT_MAX ); + p->refcount++; +} + +static inline int hyp_page_ref_dec_and_test (struct hyp_page *p) +{
arch/arm64/kvm/hyp/include/nvhe/memory.h static inline int hyp_page_count(void *addr) · line 65
Quoted 10 lines
arch/arm64/kvm/hyp/include/nvhe/memory.h +10
-0+BUG_ON (!p->refcount); + p->refcount--; +return (p->refcount ==0 ); +} + +static inline void hyp_set_page_refcounted (struct hyp_page *p) +{ +BUG_ON (p->refcount); + p->refcount =1 ; +}
It might be good to add a comment mentioning the hyp_pool::lock must be held to update refcounts, as that part is slightly less clear when the helpers are hoisted out of page_alloc.c
With that:
--
Thanks,
Oliver
_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 2/25 KVM: arm64: Allow attaching of non-coalescable pages to a hyp pool
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
All the contiguous pages used to initialize a 'struct hyp_pool' are considered coalescable, which means that the hyp page allocator will actively try to merge them with their buddies on the hyp_put_page() path. However, using hyp_put_page() on a page that is not part of the inital memory range given to a hyp_pool() is currently unsupported.
In order to allow dynamically extending hyp pools at run-time, add a check to __hyp_attach_page() to allow inserting 'external' pages into the free-list of order 0. This will be necessary to allow lazy donation of pages from the host to the hypervisor when allocating guest stage-2 page-table pages at EL2.
--- arch/arm64/kvm/hyp/nvhe/page_alloc.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/arm64/kvm/hyp/nvhe/page_alloc.c +5 -0
@@ -93,11 +93,15 @@ static inline struct hyp_page *node_to_page(struct list_head *node)static void __hyp_attach_page (struct hyp_pool *pool,struct hyp_page *p) { +phys_addr_t phys =hyp_page_to_phys (p);unsigned short order = p->order;struct hyp_page *buddy;memset (hyp_page_to_virt (p),0 ,PAGE_SIZE << p->order); +if (phys < pool->range_start || phys >= pool->range_end) + goto insert; +/* * Only the first struct hyp_page of a high-order page (otherwise known * as the 'head') should have p->order set. The non-head pages should
@@ -116,6 +120,7 @@ static void __hyp_attach_page(struct hyp_pool *pool, p =min (p, buddy); } +insert:/* Mark the new head, and insert it */ p->order = order;page_add_to_list (p, &pool->free_area[order]);
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 3/25 KVM: arm64: Back the hypervisor 'struct hyp_page' array for all memory
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
The EL2 'vmemmap' array in nVHE Protected mode is currently very sparse:
only memory pages owned by the hypervisor itself have a matching 'struct hyp_page'. However, as the size of this struct has been reduced significantly since its introduction, it appears that we can now afford to back the vmemmap for all of memory.
Having an easily accessible 'struct hyp_page' for every physical page in memory provides the hypervisor with a simple mechanism to store metadata (e.g. a refcount) that wouldn't otherwise fit in the very limited number of software bits available in the host stage-2 page-table entries. This will be used in subsequent patches when pinning host memory pages for use by the hypervisor at EL2.
--- arch/arm64/include/asm/kvm_pkvm.h | 26 +++++++++++++++++++++++ arch/arm64/kvm/hyp/include/nvhe/mm.h | 14 +------------ arch/arm64/kvm/hyp/nvhe/mm.c | 31 ++++++++++++++++++++++++---- arch/arm64/kvm/hyp/nvhe/page_alloc.c | 4 +--- arch/arm64/kvm/hyp/nvhe/setup.c | 7 +++---- arch/arm64/kvm/pkvm.c | 18 ++-------------- 6 files changed, 60 insertions(+), 40 deletions(-)
arch/arm64/include/asm/kvm_pkvm.h +26 -0
@@ -14,6 +14,32 @@extern struct memblock_region kvm_nvhe_sym (hyp_memory )[];extern unsigned int kvm_nvhe_sym (hyp_memblock_nr ); +static inline unsigned long +hyp_vmemmap_memblock_size (struct memblock_region *reg,size_t vmemmap_entry_size) +{ +unsigned long nr_pages = reg->size >>PAGE_SHIFT ; +unsigned long start, end; + + start = (reg->base >>PAGE_SHIFT ) * vmemmap_entry_size; + end = start + nr_pages * vmemmap_entry_size; + start =ALIGN_DOWN (start,PAGE_SIZE ); + end =ALIGN (end,PAGE_SIZE ); + +return end - start; +} + +static inline unsigned long hyp_vmemmap_pages (size_t vmemmap_entry_size) +{ +unsigned long res =0 , i; + +for (i =0 ; i <kvm_nvhe_sym (hyp_memblock_nr); i++) { + res +=hyp_vmemmap_memblock_size (&kvm_nvhe_sym (hyp_memory)[i], + vmemmap_entry_size); + } + +return res >>PAGE_SHIFT ; +} +static inline unsigned long __hyp_pgtable_max_pages (unsigned long nr_pages) {unsigned long total =0 , i;
arch/arm64/kvm/hyp/include/nvhe/mm.h +1 -13
@@ -15,7 +15,7 @@ extern hyp_spinlock_t pkvm_pgd_lock;int hyp_create_idmap (u32 hyp_va_bits);int hyp_map_vectors (void ); -int hyp_back_vmemmap (phys_addr_t phys,unsigned long size,phys_addr_t back); +int hyp_back_vmemmap (phys_addr_t back);int pkvm_cpu_set_vector (enum arm64_hyp_spectre_vector slot);int pkvm_create_mappings (void *from,void *to,enum kvm_pgtable_prot prot);int pkvm_create_mappings_locked (void *from,void *to,enum kvm_pgtable_prot prot);
@@ -24,16 +24,4 @@ int __pkvm_create_private_mapping(phys_addr_t phys, size_t size, unsigned long *haddr);int pkvm_alloc_private_va_range (size_t size,unsigned long *haddr); -static inline void hyp_vmemmap_range (phys_addr_t phys,unsigned long size, -unsigned long *start,unsigned long *end) -{ -unsigned long nr_pages = size >>PAGE_SHIFT ; -struct hyp_page *p =hyp_phys_to_page (phys); - - *start = (unsigned long )p; - *end = *start + nr_pages *sizeof (struct hyp_page ); - *start =ALIGN_DOWN (*start,PAGE_SIZE ); - *end =ALIGN (*end,PAGE_SIZE ); -} -#endif /* __KVM_HYP_MM_H */
arch/arm64/kvm/hyp/nvhe/mm.c +27 -4
@@ -129,13 +129,36 @@ int pkvm_create_mappings(void *from, void *to, enum kvm_pgtable_prot prot)return ret; } -int hyp_back_vmemmap (phys_addr_t phys,unsigned long size,phys_addr_t back) +int hyp_back_vmemmap (phys_addr_t back) { -unsigned long start, end; +unsigned long i, start, size, end =0 ; +int ret; -hyp_vmemmap_range (phys, size, &start, &end); +for (i =0 ; i < hyp_memblock_nr; i++) { + start = hyp_memory[i].base; + start =ALIGN_DOWN ((u64 )hyp_phys_to_page (start),PAGE_SIZE ); +/* +* The begining of the hyp_vmemmap region for the current +* memblock may already be backed by the page backing the end +* the previous region, so avoid mapping it twice. +*/ + start =max (start, end); + + end = hyp_memory[i].base + hyp_memory[i].size; + end =PAGE_ALIGN ((u64 )hyp_phys_to_page (end)); +if (start >= end) +continue ; + + size = end - start; + ret =__pkvm_create_mappings (start, size, back,PAGE_HYP ); +if (ret) +return ret; + +memset (hyp_phys_to_virt (back),0 , size); + back += size; + } -return __pkvm_create_mappings (start, end - start, back,PAGE_HYP ); +return 0 ; }static void *__hyp_bp_vect_base;
arch/arm64/kvm/hyp/nvhe/page_alloc.c +1 -3
@@ -235,10 +235,8 @@ int hyp_pool_init(struct hyp_pool *pool, u64 pfn, unsigned int nr_pages,/* Init the vmemmap portion */ p =hyp_phys_to_page (phys); -for (i =0 ; i < nr_pages; i++) { - p[i].order =0 ; +for (i =0 ; i < nr_pages; i++)hyp_set_page_refcounted (&p[i]); - }/* Attach the unused pages to the buddy tree */ for (i = reserved_pages; i < nr_pages; i++)
arch/arm64/kvm/hyp/nvhe/setup.c +3 -4
@@ -31,12 +31,11 @@ static struct hyp_pool hpool;static int divide_memory_pool (void *virt,unsigned long size) { -unsigned long vstart, vend, nr_pages; +unsigned long nr_pages;hyp_early_alloc_init (virt, size); -hyp_vmemmap_range (__hyp_pa (virt), size, &vstart, &vend); - nr_pages = (vend - vstart) >>PAGE_SHIFT ; + nr_pages =hyp_vmemmap_pages (sizeof (struct hyp_page )); vmemmap_base =hyp_early_alloc_contig (nr_pages);if (!vmemmap_base)return -ENOMEM ;
@@ -78,7 +77,7 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size,if (ret)return ret; - ret =hyp_back_vmemmap (phys, size,hyp_virt_to_phys (vmemmap_base)); + ret =hyp_back_vmemmap (hyp_virt_to_phys (vmemmap_base));if (ret)return ret;
arch/arm64/kvm/pkvm.c +2 -16
@@ -53,7 +53,7 @@ static int __init register_memblock_regions(void)void __init kvm_hyp_reserve (void ) { -u64 nr_pages, prev, hyp_mem_pages =0 ; +u64 hyp_mem_pages =0 ;int ret;if (!is_hyp_mode_available () ||is_kernel_in_hyp_mode ())
@@ -71,21 +71,7 @@ void __init kvm_hyp_reserve(void) hyp_mem_pages +=hyp_s1_pgtable_pages (); hyp_mem_pages +=host_s2_pgtable_pages (); - -/* -* The hyp_vmemmap needs to be backed by pages, but these pages -* themselves need to be present in the vmemmap, so compute the number -* of pages needed by looking for a fixed point. -*/ - nr_pages =0 ; -do { - prev = nr_pages; - nr_pages = hyp_mem_pages + prev; - nr_pages =DIV_ROUND_UP (nr_pages *STRUCT_HYP_PAGE_SIZE , -PAGE_SIZE ); - nr_pages +=__hyp_pgtable_max_pages (nr_pages); - }while (nr_pages != prev); - hyp_mem_pages += nr_pages; + hyp_mem_pages +=hyp_vmemmap_pages (STRUCT_HYP_PAGE_SIZE );/* * Try to allocate a PMD-aligned region to reduce TLB pressure once
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 4/25 KVM: arm64: Fix-up hyp stage-1 refcounts for all pages mapped at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
In order to allow unmapping arbitrary memory pages from the hypervisor stage-1 page-table, fix-up the initial refcount for pages that have been mapped before the 'vmemmap' array was up and running so that it accurately accounts for all existing hypervisor mappings.
This is achieved by traversing the entire hypervisor stage-1 page-table during initialisation of EL2 and updating the corresponding 'struct hyp_page' for each valid mapping.
--- arch/arm64/kvm/hyp/nvhe/setup.c | 62 +++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 19 deletions(-)
arch/arm64/kvm/hyp/nvhe/setup.c +43 -19
@@ -185,12 +185,11 @@ static void hpool_put_page(void *addr)hyp_put_page (&hpool, addr); } -static int finalize_host_mappings_walker (u64 addr,u64 end,u32 level, -kvm_pte_t *ptep, -enum kvm_pgtable_walk_flags flag, -void *const arg) +static int fix_host_ownership_walker (u64 addr,u64 end,u32 level, +kvm_pte_t *ptep, +enum kvm_pgtable_walk_flags flag, +void *const arg) { -struct kvm_pgtable_mm_ops *mm_ops = arg;enum kvm_pgtable_prot prot;enum pkvm_page_state state;kvm_pte_t pte = *ptep;
@@ -199,15 +198,6 @@ static int finalize_host_mappings_walker(u64 addr, u64 end, u32 level,if (!kvm_pte_valid (pte))return 0 ; -/* -* Fix-up the refcount for the page-table pages as the early allocator -* was unable to access the hyp_vmemmap and so the buddy allocator has -* initialised the refcount to '1'. -*/ - mm_ops->get_page (ptep); -if (flag !=KVM_PGTABLE_WALK_LEAF ) -return 0 ; -if (level != (KVM_PGTABLE_MAX_LEVELS -1 ))return -EINVAL ;
@@ -236,12 +226,30 @@ static int finalize_host_mappings_walker(u64 addr, u64 end, u32 level,return host_stage2_idmap_locked (phys,PAGE_SIZE , prot); } -static int finalize_host_mappings (void ) +static int fix_hyp_pgtable_refcnt_walker (u64 addr,u64 end,u32 level, +kvm_pte_t *ptep, +enum kvm_pgtable_walk_flags flag, +void *const arg) +{ +struct kvm_pgtable_mm_ops *mm_ops = arg; +kvm_pte_t pte = *ptep; + +/* +* Fix-up the refcount for the page-table pages as the early allocator +* was unable to access the hyp_vmemmap and so the buddy allocator has +* initialised the refcount to '1'. +*/ +if (kvm_pte_valid (pte)) + mm_ops->get_page (ptep); + +return 0 ; +} + +static int fix_host_ownership (void ) {struct kvm_pgtable_walker walker = { - .cb = finalize_host_mappings_walker, - .flags =KVM_PGTABLE_WALK_LEAF |KVM_PGTABLE_WALK_TABLE_POST , - .arg = pkvm_pgtable.mm_ops, + .cb = fix_host_ownership_walker, + .flags =KVM_PGTABLE_WALK_LEAF , };int i, ret;
@@ -257,6 +265,18 @@ static int finalize_host_mappings(void)return 0 ; } +static int fix_hyp_pgtable_refcnt (void ) +{ +struct kvm_pgtable_walker walker = { + .cb = fix_hyp_pgtable_refcnt_walker, + .flags =KVM_PGTABLE_WALK_LEAF |KVM_PGTABLE_WALK_TABLE_POST , + .arg = pkvm_pgtable.mm_ops, + }; + +return kvm_pgtable_walk (&pkvm_pgtable,0 ,BIT (pkvm_pgtable.ia_bits), + &walker); +} +void __noreturn __pkvm_init_finalise (void ) {struct kvm_host_data *host_data =this_cpu_ptr (&kvm_host_data);
@@ -286,7 +306,11 @@ void __noreturn __pkvm_init_finalise(void) }; pkvm_pgtable.mm_ops = &pkvm_pgtable_mm_ops; - ret =finalize_host_mappings (); + ret =fix_host_ownership (); +if (ret) + goto out; + + ret =fix_hyp_pgtable_refcnt ();if (ret) goto out;
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 5/25 KVM: arm64: Unify identifiers used to distinguish host and hypervisor
In reply to Will DeaconThe 'pkvm_component_id' enum type provides constants to refer to the host and the hypervisor, yet this information is duplicated by the 'pkvm_hyp_id' constant.
Remove the definition of 'pkvm_hyp_id' and move the 'pkvm_component_id' type definition to 'mem_protect.h' so that it can be used outside of the memory protection code, for example when initialising the owner for hypervisor-owned pages.
--- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 6 +++++- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 8 -------- arch/arm64/kvm/hyp/nvhe/setup.c | 2 +- 3 files changed, 6 insertions(+), 10 deletions(-)
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +5 -1
@@ -51,7 +51,11 @@ struct host_kvm { };extern struct host_kvm host_kvm; -extern const u8 pkvm_hyp_id; +/* This corresponds to page-table locking order */ +enum pkvm_component_id { +PKVM_ID_HOST , +PKVM_ID_HYP , +};int __pkvm_prot_finalize (void );int __pkvm_host_share_hyp (u64 pfn);
arch/arm64/kvm/hyp/nvhe/mem_protect.c +0 -8
@@ -26,8 +26,6 @@ struct host_kvm host_kvm;static struct hyp_pool host_s2_pool; -const u8 pkvm_hyp_id =1 ; -static void host_lock_component (void ) {hyp_spin_lock (&host_kvm.lock);
@@ -380,12 +378,6 @@ void handle_host_mem_abort(struct kvm_cpu_context *host_ctxt)BUG_ON (ret && ret != -EAGAIN ); } -/* This corresponds to locking order */ -enum pkvm_component_id { -PKVM_ID_HOST , -PKVM_ID_HYP , -}; -struct pkvm_mem_transition {u64 nr_pages;
arch/arm64/kvm/hyp/nvhe/setup.c +1 -1
@@ -212,7 +212,7 @@ static int fix_host_ownership_walker(u64 addr, u64 end, u32 level, state =pkvm_getstate (kvm_pgtable_hyp_pte_prot (pte));switch (state) {case PKVM_PAGE_OWNED : -return host_stage2_set_owner_locked (phys,PAGE_SIZE , pkvm_hyp_id); +return host_stage2_set_owner_locked (phys,PAGE_SIZE ,PKVM_ID_HYP );case PKVM_PAGE_SHARED_OWNED : prot =pkvm_mkstate (PKVM_HOST_MEM_PROT ,PKVM_PAGE_SHARED_BORROWED );break ;
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 6/25 KVM: arm64: Implement do_donate() helper for donating memory
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Transferring ownership information of a memory region from one component to another can be achieved using a "donate" operation, which results in the previous owner losing access to the underlying pages entirely and the new owner having exclusive access to the page.
Implement a do_donate() helper, along the same lines as do_{un,}share, and provide this functionality for the host-{to,from}-hyp cases as this will later be used to donate/reclaim memory pages to store VM metadata at EL2.
In a similar manner to the sharing transitions, permission checks are performed by the hypervisor to ensure that the component initiating the transition really is the owner of the page and also that the completer does not currently have a page mapped at the target address.
--- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 2 + arch/arm64/kvm/hyp/nvhe/mem_protect.c | 239 ++++++++++++++++++ 2 files changed, 241 insertions(+)
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +2 -0
@@ -60,6 +60,8 @@ enum pkvm_component_id {int __pkvm_prot_finalize (void );int __pkvm_host_share_hyp (u64 pfn);int __pkvm_host_unshare_hyp (u64 pfn); +int __pkvm_host_donate_hyp (u64 pfn,u64 nr_pages); +int __pkvm_hyp_donate_host (u64 pfn,u64 nr_pages);bool addr_is_memory (phys_addr_t phys);int host_stage2_idmap_locked (phys_addr_t addr,u64 size,enum kvm_pgtable_prot prot);
arch/arm64/kvm/hyp/nvhe/mem_protect.c +239 -0
284 lines not on this page · raw message
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 7/25 KVM: arm64: Prevent the donation of no-map pages
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Memory regions marked as "no-map" in the host device-tree routinely include TrustZone carevouts and DMA pools. Although donating such pages to the hypervisor may not breach confidentiality, it could be used to corrupt its state in uncontrollable ways. To prevent this, let's block host-initiated memory transitions targeting "no-map" pages altogether in nVHE protected mode as there should be no valid reason to do this in current operation.
Thankfully, the pKVM EL2 hypervisor has a full copy of the host's list of memblock regions, so we can easily check for the presence of the MEMBLOCK_NOMAP flag on a region containing pages being donated from the host.
--- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-)
arch/arm64/kvm/hyp/nvhe/mem_protect.c +16 -6
@@ -193,7 +193,7 @@ struct kvm_mem_range {u64 end; }; -static bool find_mem_range (phys_addr_t addr,struct kvm_mem_range *range) +static struct memblock_region *find_mem_range (phys_addr_t addr,struct kvm_mem_range *range) {int cur, left =0 , right = hyp_memblock_nr;struct memblock_region *reg;
@@ -216,18 +216,28 @@ static bool find_mem_range(phys_addr_t addr, struct kvm_mem_range *range) }else { range->start = reg->base; range->end = end; -return true; +return reg; } } -return false; +return NULL ; }bool addr_is_memory (phys_addr_t phys) {struct kvm_mem_range range; -return find_mem_range (phys, &range); +return !!find_mem_range (phys, &range); +} + +static bool addr_is_allowed_memory (phys_addr_t phys) +{ +struct memblock_region *reg; +struct kvm_mem_range range; + + reg =find_mem_range (phys, &range); + +return reg && !(reg->flags &MEMBLOCK_NOMAP ); }static bool is_in_mem_range (u64 addr,struct kvm_mem_range *range)
@@ -346,7 +356,7 @@ static bool host_stage2_force_pte_cb(u64 addr, u64 end, enum kvm_pgtable_prot prstatic int host_stage2_idmap (u64 addr) {struct kvm_mem_range range; -bool is_memory =find_mem_range (addr, &range); +bool is_memory = !!find_mem_range (addr, &range);enum kvm_pgtable_prot prot;int ret;
@@ -424,7 +434,7 @@ static int __check_page_state_visitor(u64 addr, u64 end, u32 level,struct check_walk_data *d = arg;kvm_pte_t pte = *ptep; -if (kvm_pte_valid (pte) && !addr_is_memory (kvm_pte_to_phys (pte))) +if (kvm_pte_valid (pte) && !addr_is_allowed_memory (kvm_pte_to_phys (pte)))return -EINVAL ;return d->get_page_state (pte) == d->desired ?0 : -EPERM ;
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 8/25 KVM: arm64: Add helpers to pin memory shared with the hypervisor at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Add helpers allowing the hypervisor to check whether a range of pages are currently shared by the host, and 'pin' them if so by blocking host unshare operations until the memory has been unpinned.
This will allow the hypervisor to take references on host-provided data-structures (e.g. 'struct kvm') with the guarantee that these pages will remain in a stable state until the hypervisor decides to release them, for example during guest teardown.
--- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 3 ++ arch/arm64/kvm/hyp/include/nvhe/memory.h | 7 ++- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 48 +++++++++++++++++++ 3 files changed, 57 insertions(+), 1 deletion(-)
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +3 -0
@@ -69,6 +69,9 @@ int host_stage2_set_owner_locked(phys_addr_t addr, u64 size, u8 owner_id);int kvm_host_prepare_stage2 (void *pgt_pool_base);void handle_host_mem_abort (struct kvm_cpu_context *host_ctxt); +int hyp_pin_shared_mem (void *from,void *to); +void hyp_unpin_shared_mem (void *from,void *to); + static __always_inline void __load_host_stage2(void) {if (static_branch_likely (&kvm_protected_mode_initialized))
arch/arm64/kvm/hyp/include/nvhe/memory.h +6 -1
@@ -51,10 +51,15 @@ static inline void hyp_page_ref_inc(struct hyp_page *p) p->refcount++; } -static inline int hyp_page_ref_dec_and_test (struct hyp_page *p) +static inline void hyp_page_ref_dec (struct hyp_page *p) {BUG_ON (!p->refcount); p->refcount--; +} + +static inline int hyp_page_ref_dec_and_test (struct hyp_page *p) +{ +hyp_page_ref_dec (p);return (p->refcount ==0 ); }
arch/arm64/kvm/hyp/nvhe/mem_protect.c +48 -0
57 lines not on this page · raw message
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 9/25 KVM: arm64: Include asm/kvm_mmu.h in nvhe/mem_protect.h
In reply to Will Deaconnvhe/mem_protect.h refers to __load_stage2() in the definition of __load_host_stage2() but doesn't include the relevant header.
Include asm/kvm_mmu.h in nvhe/mem_protect.h so that users of the latter don't have to do this themselves.
--- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 1 + 1 file changed, 1 insertion(+)
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +1 -0
@@ -8,6 +8,7 @@#define __KVM_NVHE_MEM_PROTECT__#include <linux/kvm_host.h> #include <asm/kvm_hyp.h> +#include <asm/kvm_mmu.h> #include <asm/kvm_pgtable.h> #include <asm/virt.h> #include <nvhe/spinlock.h>
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 10/25 KVM: arm64: Add hyp_spinlock_t static initializer
In reply to Will DeaconFrom: Fuad Tabba <[email protected]>
Introduce a static initializer macro for 'hyp_spinlock_t' so that it is straightforward to instantiate global locks at EL2. This will be later utilised for locking the VM table in the hypervisor.
--- arch/arm64/kvm/hyp/include/nvhe/spinlock.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-)
arch/arm64/kvm/hyp/include/nvhe/spinlock.h +9 -1
@@ -28,9 +28,17 @@ typedef union hyp_spinlock { }; } hyp_spinlock_t; +#define __HYP_SPIN_LOCK_INITIALIZER \ + { .__val = 0 } + +#define __HYP_SPIN_LOCK_UNLOCKED \ + ((hyp_spinlock_t) __HYP_SPIN_LOCK_INITIALIZER) + +#define DEFINE_HYP_SPINLOCK (x) hyp_spinlock_t x = __HYP_SPIN_LOCK_UNLOCKED +#define hyp_spin_lock_init (l) \ do { \ - *(l) = (hyp_spinlock_t){ .__val = 0 }; \ + *(l) = __HYP_SPIN_LOCK_UNLOCKED; \ } while (0)static inline void hyp_spin_lock (hyp_spinlock_t *lock)
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 11/25 KVM: arm64: Rename 'host_kvm' to 'host_mmu'
In reply to Will DeaconIn preparation for introducing VM and vCPU state at EL2, rename the existing 'struct host_kvm' and its singleton 'host_kvm' instance to 'host_mmu' so as to avoid confusion between the structure tracking the host stage-2 MMU state and the host instance of a 'struct kvm' for a protected guest.
--- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 6 +-- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 46 +++++++++---------- 2 files changed, 26 insertions(+), 26 deletions(-)
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +3 -3
@@ -44,13 +44,13 @@ static inline enum pkvm_page_state pkvm_getstate(enum kvm_pgtable_prot prot)return prot &PKVM_PAGE_STATE_PROT_MASK ; } -struct host_kvm { +struct host_mmu {struct kvm_arch arch;struct kvm_pgtable pgt;struct kvm_pgtable_mm_ops mm_ops;hyp_spinlock_t lock; }; -extern struct host_kvm host_kvm; +extern struct host_mmu host_mmu;/* This corresponds to page-table locking order */ enum pkvm_component_id {
@@ -76,7 +76,7 @@ void hyp_unpin_shared_mem(void *from, void *to); static __always_inline void __load_host_stage2(void) {if (static_branch_likely (&kvm_protected_mode_initialized)) -__load_stage2 (&host_kvm.arch.mmu, &host_kvm.arch); +__load_stage2 (&host_mmu.arch.mmu, &host_mmu.arch);else write_sysreg (0 , vttbr_el2); }
arch/arm64/kvm/hyp/nvhe/mem_protect.c +23 -23
143 lines not on this page · raw message
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 12/25 KVM: arm64: Add infrastructure to create and track pKVM instances at EL2
In reply to Will DeaconFrom: Fuad Tabba <[email protected]>
Introduce a global table (and lock) to track pKVM instances at EL2, and provide hypercalls that can be used by the untrusted host to create and destroy pKVM VMs and their vCPUs. pKVM VM/vCPU state is directly accessible only by the trusted hypervisor (EL2).
Each pKVM VM is directly associated with an untrusted host KVM instance, and is referenced by the host using an opaque handle. Future patches will provide hypercalls to allow the host to initialize/set/get pKVM VM/vCPU state using the opaque handle.
--- arch/arm64/include/asm/kvm_asm.h | 3 + arch/arm64/include/asm/kvm_host.h | 8 + arch/arm64/include/asm/kvm_pgtable.h | 8 + arch/arm64/include/asm/kvm_pkvm.h | 8 + arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 3 + arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 64 +++ arch/arm64/kvm/hyp/nvhe/hyp-main.c | 31 ++ arch/arm64/kvm/hyp/nvhe/mem_protect.c | 14 + arch/arm64/kvm/hyp/nvhe/pkvm.c | 389 ++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/setup.c | 8 + arch/arm64/kvm/hyp/pgtable.c | 9 + arch/arm64/kvm/pkvm.c | 1 + 12 files changed, 546 insertions(+) create mode 100644 arch/arm64/kvm/hyp/include/nvhe/pkvm.h
arch/arm64/include/asm/kvm_asm.h +3 -0
@@ -76,6 +76,9 @@ enum __kvm_host_smccc_func { __KVM_HOST_SMCCC_FUNC___vgic_v3_save_aprs, __KVM_HOST_SMCCC_FUNC___vgic_v3_restore_aprs, __KVM_HOST_SMCCC_FUNC___pkvm_vcpu_init_traps, + __KVM_HOST_SMCCC_FUNC___pkvm_init_vm, + __KVM_HOST_SMCCC_FUNC___pkvm_init_vcpu, + __KVM_HOST_SMCCC_FUNC___pkvm_teardown_vm, };#define DECLARE_KVM_VHE_SYM (sym) extern char sym[]
arch/arm64/include/asm/kvm_host.h +8 -0
@@ -115,6 +115,8 @@ struct kvm_smccc_features {unsigned long vendor_hyp_bmap; }; +typedef unsigned int pkvm_handle_t ; +struct kvm_arch {struct kvm_s2_mmu mmu;
@@ -166,6 +168,12 @@ struct kvm_arch {/* Hypercall features firmware registers' descriptor */ struct kvm_smccc_features smccc_feat; + +/* +* For an untrusted host VM, 'pkvm_handle' is used to lookup +* the associated pKVM instance in the hypervisor. +*/ +pkvm_handle_t pkvm_handle; };struct kvm_vcpu_fault_info {
arch/arm64/include/asm/kvm_pgtable.h +8 -0
@@ -288,6 +288,14 @@ u64 kvm_pgtable_hyp_unmap(struct kvm_pgtable *pgt, u64 addr, u64 size);*/ u64 kvm_get_vtcr (u64 mmfr0,u64 mmfr1,u32 phys_shift); +/** +* kvm_pgtable_stage2_pgd_size() - Helper to compute size of a stage-2 PGD +* @vtcr: Content of the VTCR register. +* +* Return: the size (in bytes) of the stage-2 PGD +*/ +size_t kvm_pgtable_stage2_pgd_size (u64 vtcr); +/** * __kvm_pgtable_stage2_init() - Initialise a guest stage-2 page-table. * @pgt: Uninitialised page-table structure to initialise.
arch/arm64/include/asm/kvm_pkvm.h +8 -0
@@ -9,6 +9,9 @@#include <linux/memblock.h> #include <asm/kvm_pgtable.h> +/* Maximum number of protected VMs that can be created. */ +#define KVM_MAX_PVMS 255 +#define HYP_MEMBLOCK_REGIONS 128extern struct memblock_region kvm_nvhe_sym (hyp_memory )[];
@@ -40,6 +43,11 @@ static inline unsigned long hyp_vmemmap_pages(size_t vmemmap_entry_size)return res >>PAGE_SHIFT ; } +static inline unsigned long hyp_vm_table_pages (void ) +{ +return PAGE_ALIGN (KVM_MAX_PVMS *sizeof (void *)) >>PAGE_SHIFT ; +} +static inline unsigned long __hyp_pgtable_max_pages (unsigned long nr_pages) {unsigned long total =0 , i;
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +3 -0
@@ -11,6 +11,7 @@#include <asm/kvm_mmu.h> #include <asm/kvm_pgtable.h> #include <asm/virt.h> +#include <nvhe/pkvm.h> #include <nvhe/spinlock.h> /*
@@ -68,10 +69,12 @@ bool addr_is_memory(phys_addr_t phys);int host_stage2_idmap_locked (phys_addr_t addr,u64 size,enum kvm_pgtable_prot prot);int host_stage2_set_owner_locked (phys_addr_t addr,u64 size,u8 owner_id);int kvm_host_prepare_stage2 (void *pgt_pool_base); +int kvm_guest_prepare_stage2 (struct pkvm_hyp_vm *vm,void *pgd);void handle_host_mem_abort (struct kvm_cpu_context *host_ctxt);int hyp_pin_shared_mem (void *from,void *to);void hyp_unpin_shared_mem (void *from,void *to); +void reclaim_guest_pages (struct pkvm_hyp_vm *vm); static __always_inline void __load_host_stage2(void) {
arch/arm64/kvm/hyp/include/nvhe/pkvm.h new file +64 -0
64 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/hyp-main.c +31 -0
@@ -15,6 +15,7 @@#include <nvhe/mem_protect.h> #include <nvhe/mm.h> +#include <nvhe/pkvm.h> #include <nvhe/trap_handler.h> DEFINE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params);
@@ -191,6 +192,33 @@ static void handle___pkvm_vcpu_init_traps(struct kvm_cpu_context *host_ctxt)__pkvm_vcpu_init_traps (kern_hyp_va (vcpu)); } +static void handle___pkvm_init_vm (struct kvm_cpu_context *host_ctxt) +{ + DECLARE_REG(struct kvm *, host_kvm, host_ctxt, 1); + DECLARE_REG(unsigned long, vm_hva, host_ctxt, 2); + DECLARE_REG(unsigned long, pgd_hva, host_ctxt, 3); + + host_kvm =kern_hyp_va (host_kvm); +cpu_reg (host_ctxt,1 ) =__pkvm_init_vm (host_kvm, vm_hva, pgd_hva); +} + +static void handle___pkvm_init_vcpu (struct kvm_cpu_context *host_ctxt) +{ +DECLARE_REG (pkvm_handle_t, handle, host_ctxt,1 ); + DECLARE_REG(struct kvm_vcpu *, host_vcpu, host_ctxt, 2); + DECLARE_REG(unsigned long, vcpu_hva, host_ctxt, 3); + + host_vcpu =kern_hyp_va (host_vcpu); +cpu_reg (host_ctxt,1 ) =__pkvm_init_vcpu (handle, host_vcpu, vcpu_hva); +} + +static void handle___pkvm_teardown_vm (struct kvm_cpu_context *host_ctxt) +{ +DECLARE_REG (pkvm_handle_t, handle, host_ctxt,1 ); + +cpu_reg (host_ctxt,1 ) =__pkvm_teardown_vm (handle); +} +typedef void (*hcall_t )(struct kvm_cpu_context *);#define HANDLE_FUNC (x) [__KVM_HOST_SMCCC_FUNC_##x] = (hcall_t)handle_##x
@@ -220,6 +248,9 @@ static const hcall_t host_hcall[] = {HANDLE_FUNC (__vgic_v3_save_aprs),HANDLE_FUNC (__vgic_v3_restore_aprs),HANDLE_FUNC (__pkvm_vcpu_init_traps), +HANDLE_FUNC (__pkvm_init_vm), +HANDLE_FUNC (__pkvm_init_vcpu), + HANDLE_FUNC(__pkvm_teardown_vm), };static void handle_host_hcall (struct kvm_cpu_context *host_ctxt)
arch/arm64/kvm/hyp/nvhe/mem_protect.c +14 -0
@@ -141,6 +141,20 @@ int kvm_host_prepare_stage2(void *pgt_pool_base)return 0 ; } +int kvm_guest_prepare_stage2 (struct pkvm_hyp_vm *vm,void *pgd) +{ + vm->pgt.pgd = pgd; +return 0 ; +} + +void reclaim_guest_pages (struct pkvm_hyp_vm *vm) +{ +unsigned long nr_pages; + + nr_pages =kvm_pgtable_stage2_pgd_size (vm->kvm.arch.vtcr) >>PAGE_SHIFT ; +WARN_ON (__pkvm_hyp_donate_host (hyp_virt_to_pfn (vm->pgt.pgd), nr_pages)); +} +int __pkvm_prot_finalize (void ) {struct kvm_s2_mmu *mmu = &host_mmu.arch.mmu;
arch/arm64/kvm/hyp/nvhe/pkvm.c +389 -0
398 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/setup.c +8 -0
@@ -16,6 +16,7 @@#include <nvhe/memory.h> #include <nvhe/mem_protect.h> #include <nvhe/mm.h> +#include <nvhe/pkvm.h> #include <nvhe/trap_handler.h> unsigned long hyp_nr_cpus;
@@ -24,6 +25,7 @@ unsigned long hyp_nr_cpus; (unsigned long)__per_cpu_start)static void *vmemmap_base; +static void *vm_table_base;static void *hyp_pgt_base;static void *host_s2_pgt_base;static struct kvm_pgtable_mm_ops pkvm_pgtable_mm_ops;
@@ -40,6 +42,11 @@ static int divide_memory_pool(void *virt, unsigned long size)if (!vmemmap_base)return -ENOMEM ; + nr_pages =hyp_vm_table_pages (); + vm_table_base =hyp_early_alloc_contig (nr_pages); +if (!vm_table_base) +return -ENOMEM ; + nr_pages =hyp_s1_pgtable_pages (); hyp_pgt_base =hyp_early_alloc_contig (nr_pages);if (!hyp_pgt_base)
@@ -314,6 +321,7 @@ void __noreturn __pkvm_init_finalise(void)if (ret) goto out; +pkvm_hyp_vm_table_init (vm_table_base); out:/* * We tail-called to here from handle___pkvm_init() and will not return,
arch/arm64/kvm/hyp/pgtable.c +9 -0
@@ -1200,6 +1200,15 @@ int __kvm_pgtable_stage2_init(struct kvm_pgtable *pgt, struct kvm_s2_mmu *mmu,return 0 ; } +size_t kvm_pgtable_stage2_pgd_size (u64 vtcr) +{ +u32 ia_bits =VTCR_EL2_IPA (vtcr); +u32 sl0 =FIELD_GET (VTCR_EL2_SL0_MASK , vtcr); +u32 start_level =VTCR_EL2_TGRAN_SL0_BASE - sl0; + +return kvm_pgd_pages (ia_bits, start_level) *PAGE_SIZE ; +} +static int stage2_free_walker (u64 addr,u64 end,u32 level,kvm_pte_t *ptep,enum kvm_pgtable_walk_flags flag,void *const arg)
arch/arm64/kvm/pkvm.c +1 -0
@@ -71,6 +71,7 @@ void __init kvm_hyp_reserve(void) hyp_mem_pages +=hyp_s1_pgtable_pages (); hyp_mem_pages +=host_s2_pgtable_pages (); + hyp_mem_pages +=hyp_vm_table_pages (); hyp_mem_pages +=hyp_vmemmap_pages (STRUCT_HYP_PAGE_SIZE );/*
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 13/25 KVM: arm64: Instantiate pKVM hypervisor VM and vCPU structures from EL1
In reply to Will DeaconFrom: Fuad Tabba <[email protected]>
With the pKVM hypervisor at EL2 now offering hypercalls to the host for creating and destroying VM and vCPU structures, plumb these in to the existing arm64 KVM backend to ensure that the hypervisor data structures are allocated and initialised on first vCPU run for a pKVM guest.
In the host, 'struct kvm_protected_vm' is introduced to hold the handle of the pKVM VM instance as well as to track references to the memory donated to the hypervisor so that it can be freed back to the host allocator following VM teardown. The stage-2 page-table, hypervisor VM and vCPU structures are allocated separately so as to avoid the need for a large physically-contiguous allocation in the host at run-time.
--- arch/arm64/include/asm/kvm_host.h | 15 +++- arch/arm64/include/asm/kvm_pkvm.h | 4 + arch/arm64/kvm/arm.c | 14 +++ arch/arm64/kvm/hyp/hyp-constants.c | 3 + arch/arm64/kvm/hyp/nvhe/pkvm.c | 15 +++- arch/arm64/kvm/pkvm.c | 138 +++++++++++++++++++++++++++++ 6 files changed, 183 insertions(+), 6 deletions(-)
arch/arm64/include/asm/kvm_host.h +13 -2
@@ -117,6 +117,17 @@ struct kvm_smccc_features {typedef unsigned int pkvm_handle_t ; +struct kvm_protected_vm { +pkvm_handle_t handle; +struct mutex vm_lock; + +struct { +void *pgd; +void *vm; +void *vcpus[KVM_MAX_VCPUS ]; + } hyp_donations; +}; +struct kvm_arch {struct kvm_s2_mmu mmu;
@@ -170,10 +181,10 @@ struct kvm_arch {struct kvm_smccc_features smccc_feat;/* -* For an untrusted host VM, 'pkvm_handle' is used to lookup +* For an untrusted host VM, 'pkvm.handle' is used to lookup * the associated pKVM instance in the hypervisor. */ -pkvm_handle_t pkvm_handle; +struct kvm_protected_vm pkvm; };struct kvm_vcpu_fault_info {
arch/arm64/include/asm/kvm_pkvm.h +4 -0
@@ -14,6 +14,10 @@#define HYP_MEMBLOCK_REGIONS 128 +int pkvm_init_host_vm (struct kvm *kvm); +int pkvm_create_hyp_vm (struct kvm *kvm); +void pkvm_destroy_hyp_vm (struct kvm *kvm); +extern struct memblock_region kvm_nvhe_sym (hyp_memory )[];extern unsigned int kvm_nvhe_sym (hyp_memblock_nr );
arch/arm64/kvm/arm.c +14 -0
@@ -37,6 +37,7 @@#include <asm/kvm_arm.h> #include <asm/kvm_asm.h> #include <asm/kvm_mmu.h> +#include <asm/kvm_pkvm.h> #include <asm/kvm_emulate.h> #include <asm/sections.h>
@@ -150,6 +151,10 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)if (ret) goto out_free_stage2_pgd; + ret =pkvm_init_host_vm (kvm); +if (ret) + goto out_free_stage2_pgd; +if (!zalloc_cpumask_var (&kvm->arch.supported_cpus,GFP_KERNEL )) { ret = -ENOMEM ; goto out_free_stage2_pgd;
@@ -187,6 +192,9 @@ void kvm_arch_destroy_vm(struct kvm *kvm)kvm_vgic_destroy (kvm); +if (is_protected_kvm_enabled ()) +pkvm_destroy_hyp_vm (kvm); +kvm_destroy_vcpus (kvm);kvm_unshare_hyp (kvm, kvm +1 );
@@ -569,6 +577,12 @@ int kvm_arch_vcpu_run_pid_change(struct kvm_vcpu *vcpu)if (ret)return ret; +if (is_protected_kvm_enabled ()) { + ret =pkvm_create_hyp_vm (kvm); +if (ret) +return ret; + } +if (!irqchip_in_kernel (kvm)) {/* * Tell the rest of the code that there are userspace irqchip
arch/arm64/kvm/hyp/hyp-constants.c +3 -0
@@ -2,9 +2,12 @@#include <linux/kbuild.h> #include <nvhe/memory.h> +#include <nvhe/pkvm.h> int main (void ) {DEFINE (STRUCT_HYP_PAGE_SIZE ,sizeof (struct hyp_page )); +DEFINE (PKVM_HYP_VM_SIZE ,sizeof (struct pkvm_hyp_vm )); +DEFINE (PKVM_HYP_VCPU_SIZE ,sizeof (struct pkvm_hyp_vcpu ));return 0 ; }
arch/arm64/kvm/hyp/nvhe/pkvm.c +11 -4
@@ -335,7 +335,7 @@ static pkvm_handle_t insert_vm_table_entry(struct kvm *host_kvm,if (idx <0 )return idx; - hyp_vm->kvm.arch.pkvm_handle =idx_to_vm_handle (idx); + hyp_vm->kvm.arch.pkvm.handle =idx_to_vm_handle (idx); hyp_vm->donated_memory_size = donated_memory_size;/* VMID 0 is reserved for the host */
@@ -345,7 +345,7 @@ static pkvm_handle_t insert_vm_table_entry(struct kvm *host_kvm, mmu->pgt = &hyp_vm->pgt; vm_table[idx] = hyp_vm; -return hyp_vm->kvm.arch.pkvm_handle; +return hyp_vm->kvm.arch.pkvm.handle; }/*
@@ -470,10 +470,10 @@ int __pkvm_init_vm(struct kvm *host_kvm, unsigned long vm_hva, goto err_remove_vm_table_entry;hyp_spin_unlock (&vm_table_lock); -return hyp_vm->kvm.arch.pkvm_handle; +return hyp_vm->kvm.arch.pkvm.handle; err_remove_vm_table_entry: -remove_vm_table_entry (hyp_vm->kvm.arch.pkvm_handle); +remove_vm_table_entry (hyp_vm->kvm.arch.pkvm.handle); err_unlock:hyp_spin_unlock (&vm_table_lock); err_remove_mappings:
@@ -539,6 +539,7 @@ int __pkvm_init_vcpu(pkvm_handle_t handle, struct kvm_vcpu *host_vcpu,int __pkvm_teardown_vm (pkvm_handle_t handle) {struct pkvm_hyp_vm *hyp_vm; +unsigned int idx;int err;hyp_spin_lock (&vm_table_lock);
@@ -565,6 +566,12 @@ int __pkvm_teardown_vm(pkvm_handle_t handle)/* Push the metadata pages to the teardown memcache */ hyp_unpin_shared_mem (hyp_vm->host_kvm, hyp_vm->host_kvm +1 ); +for (idx =0 ; idx < hyp_vm->nr_vcpus; ++idx) { +struct pkvm_hyp_vcpu *hyp_vcpu = hyp_vm->vcpus[idx]; + +unmap_donated_memory (hyp_vcpu,sizeof (*hyp_vcpu)); + } +unmap_donated_memory (hyp_vm, hyp_vm->donated_memory_size);return 0 ;
arch/arm64/kvm/pkvm.c +138 -0
147 lines not on this page · raw message
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 14/25 KVM: arm64: Add per-cpu fixmap infrastructure at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Mapping pages in a guest page-table from within the pKVM hypervisor at EL2 may require cache maintenance to ensure that the initialised page contents is visible even to non-cacheable (e.g. MMU-off) accesses from the guest.
In preparation for performing this maintenance at EL2, introduce a per-vCPU fixmap which allows the pKVM hypervisor to map guest pages temporarily into its stage-1 page-table for the purposes of cache maintenance and, in future, poisoning on the reclaim path. The use of a fixmap avoids the need for memory allocation or locking on the map() path.
--- arch/arm64/include/asm/kvm_pgtable.h | 12 +++ arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 2 + arch/arm64/kvm/hyp/include/nvhe/mm.h | 4 + arch/arm64/kvm/hyp/nvhe/mem_protect.c | 1 - arch/arm64/kvm/hyp/nvhe/mm.c | 94 +++++++++++++++++++ arch/arm64/kvm/hyp/nvhe/setup.c | 4 + arch/arm64/kvm/hyp/pgtable.c | 12 --- 7 files changed, 116 insertions(+), 13 deletions(-)
arch/arm64/include/asm/kvm_pgtable.h +12 -0
@@ -30,6 +30,8 @@ typedef u64 kvm_pte_t;#define KVM_PTE_ADDR_MASK GENMASK(47, PAGE_SHIFT)#define KVM_PTE_ADDR_51_48 GENMASK(15, 12) +#define KVM_PHYS_INVALID (-1ULL) +static inline bool kvm_pte_valid (kvm_pte_t pte) {return pte &KVM_PTE_VALID ;
@@ -45,6 +47,16 @@ static inline u64 kvm_pte_to_phys(kvm_pte_t pte)return pa; } +static inline kvm_pte_t kvm_phys_to_pte (u64 pa) +{ +kvm_pte_t pte = pa &KVM_PTE_ADDR_MASK ; + +if (PAGE_SHIFT ==16 ) + pte |=FIELD_PREP (KVM_PTE_ADDR_51_48 , pa >>48 ); + +return pte; +} +static inline u64 kvm_granule_shift (u32 level) {/* Assumes KVM_PGTABLE_MAX_LEVELS is 4 */
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +2 -0
@@ -59,6 +59,8 @@ enum pkvm_component_id { PKVM_ID_HYP, }; +extern unsigned long hyp_nr_cpus; +int __pkvm_prot_finalize (void );int __pkvm_host_share_hyp (u64 pfn);int __pkvm_host_unshare_hyp (u64 pfn);
arch/arm64/kvm/hyp/include/nvhe/mm.h +4 -0
@@ -13,6 +13,10 @@extern struct kvm_pgtable pkvm_pgtable;extern hyp_spinlock_t pkvm_pgd_lock; +int hyp_create_pcpu_fixmap (void ); +void *hyp_fixmap_map (phys_addr_t phys); +void hyp_fixmap_unmap (void ); +int hyp_create_idmap (u32 hyp_va_bits);int hyp_map_vectors (void );int hyp_back_vmemmap (phys_addr_t back);
arch/arm64/kvm/hyp/nvhe/mem_protect.c +0 -1
@@ -21,7 +21,6 @@#define KVM_HOST_S2_FLAGS (KVM_PGTABLE_S2_NOFWB | KVM_PGTABLE_S2_IDMAP) -extern unsigned long hyp_nr_cpus;struct host_mmu host_mmu;static struct hyp_pool host_s2_pool;
arch/arm64/kvm/hyp/nvhe/mm.c +94 -0
112 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/setup.c +4 -0
@@ -321,6 +321,10 @@ void __noreturn __pkvm_init_finalise(void)if (ret) goto out; + ret =hyp_create_pcpu_fixmap (); +if (ret) + goto out; +pkvm_hyp_vm_table_init (vm_table_base); out:/*
arch/arm64/kvm/hyp/pgtable.c +0 -12
@@ -57,8 +57,6 @@ struct kvm_pgtable_walk_data {u64 end; }; -#define KVM_PHYS_INVALID (-1ULL) -static bool kvm_phys_is_valid (u64 phys) {return phys <BIT (id_aa64mmfr0_parange_to_phys_shift (ID_AA64MMFR0_PARANGE_MAX ));
@@ -122,16 +120,6 @@ static bool kvm_pte_table(kvm_pte_t pte, u32 level)return FIELD_GET (KVM_PTE_TYPE , pte) ==KVM_PTE_TYPE_TABLE ; } -static kvm_pte_t kvm_phys_to_pte (u64 pa) -{ -kvm_pte_t pte = pa &KVM_PTE_ADDR_MASK ; - -if (PAGE_SHIFT ==16 ) - pte |=FIELD_PREP (KVM_PTE_ADDR_51_48 , pa >>48 ); - -return pte; -} -static kvm_pte_t *kvm_pte_follow (kvm_pte_t pte,struct kvm_pgtable_mm_ops *mm_ops) {return mm_ops->phys_to_virt (kvm_pte_to_phys (pte));
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
kernel test robot
build botRe: [PATCH v3 14/25] KVM: arm64: Add per-cpu fixmap infrastructure at EL2
Thank you for the patch! Yet something to improve:
Hi Will,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on v6.0-rc5]
[also build test ERROR on linus/master next-20220923] [cannot apply to arm64/for-next/core]
[If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Will-Deacon/KVM-arm64-Introduce-pKVM-hyp-VM-and-vCPU-state-at-EL2/20220914-164007 base: 80e78fcce86de0288793a0ef0f6acf37656ee4cf config: arm64-randconfig-s053-20220923 compiler: aarch64-linux-gcc (GCC) 12.1.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://github.com/intel-lab-lkp/linux/commit/1b331dc8141e012614bd97cd7d2846801c5e51f4
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Will-Deacon/KVM-arm64-Introduce-pKVM-hyp-VM-and-vCPU-state-at-EL2/20220914-164007
git checkout 1b331dc8141e012614bd97cd7d2846801c5e51f4
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=arm64 SHELL=/bin/bash arch/arm64/ sound/
If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <[email protected]>
All errors (new ones prefixed by >>):
In file included from <command-line>:
In function 'kvm_phys_to_pte',
inlined from 'hyp_fixmap_map' at arch/arm64/kvm/hyp/nvhe/mm.c:228:10:
>> include/linux/compiler_types.h:354:45: error: call to '__compiletime_assert_416' declared with attribute error: FIELD_PREP: value too large for the field
354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^
include/linux/compiler_types.h:335:25: note: in definition of macro '__compiletime_assert'
335 | prefix ## suffix(); \
| ^~~~~~
include/linux/compiler_types.h:354:9: note: in expansion of macro '_compiletime_assert'
354 | _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)
| ^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
39 | #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
| ^~~~~~~~~~~~~~~~~~
include/linux/bitfield.h:68:17: note: in expansion of macro 'BUILD_BUG_ON_MSG'
68 | BUILD_BUG_ON_MSG(__builtin_constant_p(_val) ? \
| ^~~~~~~~~~~~~~~~
include/linux/bitfield.h:114:17: note: in expansion of macro '__BF_FIELD_CHECK'
114 | __BF_FIELD_CHECK(_mask, 0ULL, _val, "FIELD_PREP: "); \
| ^~~~~~~~~~~~~~~~
arch/arm64/include/asm/kvm_pgtable.h:55:24: note: in expansion of macro 'FIELD_PREP'
55 | pte |= FIELD_PREP(KVM_PTE_ADDR_51_48, pa >> 48);
| ^~~~~~~~~~vim +/__compiletime_assert_416 +354 include/linux/compiler_types.h
eb5c2d4b45e3d2 Will Deacon 2020-07-21 340 eb5c2d4b45e3d2 Will Deacon 2020-07-21 341 #define _compiletime_assert(condition, msg, prefix, suffix) \ eb5c2d4b45e3d2 Will Deacon 2020-07-21 342 __compiletime_assert(condition, msg, prefix, suffix) eb5c2d4b45e3d2 Will Deacon 2020-07-21 343 eb5c2d4b45e3d2 Will Deacon 2020-07-21 344 /** eb5c2d4b45e3d2 Will Deacon 2020-07-21 345 * compiletime_assert - break build and emit msg if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 346 * @condition: a compile-time constant condition to check eb5c2d4b45e3d2 Will Deacon 2020-07-21 347 * @msg: a message to emit if condition is false eb5c2d4b45e3d2 Will Deacon 2020-07-21 348 * eb5c2d4b45e3d2 Will Deacon 2020-07-21 349 * In tradition of POSIX assert, this macro will break the build if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 350 * supplied condition is *false*, emitting the supplied error message if the eb5c2d4b45e3d2 Will Deacon 2020-07-21 351 * compiler has support to do so. eb5c2d4b45e3d2 Will Deacon 2020-07-21 352 */ eb5c2d4b45e3d2 Will Deacon 2020-07-21 353 #define compiletime_assert(condition, msg) \
eb5c2d4b45e3d2 Will Deacon 2020-07-21 @354 _compiletime_assert(condition, msg, __compiletime_assert_, __COUNTER__)eb5c2d4b45e3d2 Will Deacon 2020-07-21 355
Signature · 2 lines
0-DAY CI Kernel Test Service https://01.org/lkp
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm64 6.0.0-rc5 Kernel Configuration
#CONFIG_CC_VERSION_TEXT="aarch64-linux-gcc (GCC) 12.1.0" CONFIG_CC_IS_GCC=yCONFIG_GCC_VERSION=120100 CONFIG_CLANG_VERSION=0CONFIG_AS_IS_GNU=yCONFIG_AS_VERSION=23800CONFIG_LD_IS_BFD=yCONFIG_LD_VERSION=23800CONFIG_LLD_VERSION=0 CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=123 CONFIG_CONSTRUCTORS=yCONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y CONFIG_THREAD_INFO_IN_TASK=y
#
# General setup
#CONFIG_INIT_ENV_ARG_LIMIT=32CONFIG_COMPILE_TEST=y
# CONFIG_WERROR is not setCONFIG_LOCALVERSION=""CONFIG_BUILD_SALT=""CONFIG_DEFAULT_INIT=""CONFIG_DEFAULT_HOSTNAME="(none)"CONFIG_SYSVIPC=yCONFIG_SYSVIPC_SYSCTL=yCONFIG_WATCH_QUEUE=yCONFIG_CROSS_MEMORY_ATTACH=y
# CONFIG_USELIB is not setCONFIG_HAVE_ARCH_AUDITSYSCALL=y
#
# IRQ subsystem
#CONFIG_GENERIC_IRQ_PROBE=yCONFIG_GENERIC_IRQ_SHOW=yCONFIG_GENERIC_IRQ_SHOW_LEVEL=yCONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=yCONFIG_GENERIC_IRQ_MIGRATION=yCONFIG_GENERIC_IRQ_INJECTION=yCONFIG_HARDIRQS_SW_RESEND=yCONFIG_GENERIC_IRQ_CHIP=yCONFIG_IRQ_DOMAIN=yCONFIG_IRQ_SIM=yCONFIG_IRQ_DOMAIN_HIERARCHY=yCONFIG_IRQ_FASTEOI_HIERARCHY_HANDLERS=yCONFIG_GENERIC_IRQ_IPI=yCONFIG_GENERIC_MSI_IRQ=yCONFIG_GENERIC_MSI_IRQ_DOMAIN=yCONFIG_IRQ_MSI_IOMMU=yCONFIG_IRQ_FORCED_THREADING=yCONFIG_SPARSE_IRQ=yCONFIG_GENERIC_IRQ_DEBUGFS=y
# end of IRQ subsystem
CONFIG_GENERIC_TIME_VSYSCALL=yCONFIG_GENERIC_CLOCKEVENTS=yCONFIG_ARCH_HAS_TICK_BROADCAST=yCONFIG_GENERIC_CLOCKEVENTS_BROADCAST=yCONFIG_HAVE_POSIX_CPU_TIMERS_TASK_WORK=yCONFIG_POSIX_CPU_TIMERS_TASK_WORK=yCONFIG_CONTEXT_TRACKING=yCONFIG_CONTEXT_TRACKING_IDLE=y
#
# Timers subsystem
#CONFIG_TICK_ONESHOT=yCONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not setCONFIG_NO_HZ_IDLE=y
# CONFIG_NO_HZ_FULL is not set
# CONFIG_NO_HZ is not setCONFIG_HIGH_RES_TIMERS=y
# end of Timers subsystem
CONFIG_BPF=yCONFIG_HAVE_EBPF_JIT=yCONFIG_ARCH_WANT_DEFAULT_BPF_JIT=y
#
# BPF subsystem
#CONFIG_BPF_SYSCALL=y
# CONFIG_BPF_JIT is not set
# CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set
# end of BPF subsystem
CONFIG_PREEMPT_VOLUNTARY_BUILD=y
# CONFIG_PREEMPT_NONE is not setCONFIG_PREEMPT_VOLUNTARY=y
# CONFIG_PREEMPT is not set
# CONFIG_PREEMPT_DYNAMIC is not set
# CONFIG_SCHED_CORE is not set
#
# CPU/Task time and stats accounting
#CONFIG_TICK_CPU_ACCOUNTING=y
# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set
# CONFIG_IRQ_TIME_ACCOUNTING is not setCONFIG_HAVE_SCHED_AVG_IRQ=y
# CONFIG_BSD_PROCESS_ACCT is not setCONFIG_PSI=yCONFIG_PSI_DEFAULT_DISABLED=y
# end of CPU/Task time and stats accounting
CONFIG_CPU_ISOLATION=y
#
# RCU Subsystem
#CONFIG_TREE_RCU=yCONFIG_RCU_EXPERT=yCONFIG_SRCU=yCONFIG_TREE_SRCU=yCONFIG_TASKS_RCU_GENERIC=y
# CONFIG_FORCE_TASKS_RCU is not set
# CONFIG_FORCE_TASKS_RUDE_RCU is not setCONFIG_FORCE_TASKS_TRACE_RCU=yCONFIG_TASKS_TRACE_RCU=yCONFIG_RCU_STALL_COMMON=yCONFIG_RCU_NEED_SEGCBLIST=yCONFIG_RCU_FANOUT=64CONFIG_RCU_FANOUT_LEAF=16
# CONFIG_RCU_NOCB_CPU is not set
# CONFIG_TASKS_TRACE_RCU_READ_MB is not set
# end of RCU Subsystem
CONFIG_IKCONFIG=m
# CONFIG_IKCONFIG_PROC is not setCONFIG_IKHEADERS=mCONFIG_LOG_BUF_SHIFT=17CONFIG_LOG_CPU_MAX_BUF_SHIFT=12CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13CONFIG_PRINTK_INDEX=yCONFIG_GENERIC_SCHED_CLOCK=y
#
# Scheduler features
#CONFIG_UCLAMP_TASK=yCONFIG_UCLAMP_BUCKETS_COUNT=5
# end of Scheduler features
CONFIG_ARCH_SUPPORTS_NUMA_BALANCING=y CONFIG_CC_HAS_INT128=y CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" CONFIG_GCC12_NO_ARRAY_BOUNDS=y CONFIG_CC_NO_ARRAY_BOUNDS=y CONFIG_ARCH_SUPPORTS_INT128=y CONFIG_NUMA_BALANCING=y
# CONFIG_NUMA_BALANCING_DEFAULT_ENABLED is not set CONFIG_CGROUPS=yCONFIG_CGROUP_FAVOR_DYNMODS=y
# CONFIG_MEMCG is not set
# CONFIG_BLK_CGROUP is not set CONFIG_CGROUP_SCHED=y
# CONFIG_FAIR_GROUP_SCHED is not set CONFIG_RT_GROUP_SCHED=y
# CONFIG_UCLAMP_TASK_GROUP is not set CONFIG_CGROUP_PIDS=yCONFIG_CGROUP_RDMA=yCONFIG_CGROUP_FREEZER=yCONFIG_CPUSETS=y
# CONFIG_PROC_PID_CPUSET is not set CONFIG_CGROUP_DEVICE=yCONFIG_CGROUP_CPUACCT=yCONFIG_CGROUP_PERF=y
# CONFIG_CGROUP_BPF is not set
# CONFIG_CGROUP_MISC is not set
# CONFIG_CGROUP_DEBUG is not set CONFIG_NAMESPACES=yCONFIG_UTS_NS=yCONFIG_TIME_NS=yCONFIG_IPC_NS=yCONFIG_USER_NS=y
# CONFIG_PID_NS is not set CONFIG_CHECKPOINT_RESTORE=y
# CONFIG_SCHED_AUTOGROUP is not set CONFIG_SYSFS_DEPRECATED=y
# CONFIG_SYSFS_DEPRECATED_V2 is not set
# CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE=""
# CONFIG_RD_GZIP is not set
# CONFIG_RD_BZIP2 is not setCONFIG_RD_LZMA=y
# CONFIG_RD_XZ is not setCONFIG_RD_LZO=y
# CONFIG_RD_LZ4 is not set
# CONFIG_RD_ZSTD is not setCONFIG_BOOT_CONFIG=y
# CONFIG_BOOT_CONFIG_EMBED is not set
# CONFIG_INITRAMFS_PRESERVE_MTIME is not set
# CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE is not set CONFIG_CC_OPTIMIZE_FOR_SIZE=y CONFIG_LD_ORPHAN_WARN=yCONFIG_SYSCTL=yCONFIG_SYSCTL_EXCEPTION_TRACE=y
# CONFIG_EXPERT is not setCONFIG_MULTIUSER=yCONFIG_SYSFS_SYSCALL=yCONFIG_FHANDLE=yCONFIG_POSIX_TIMERS=yCONFIG_PRINTK=yCONFIG_BUG=yCONFIG_ELF_CORE=yCONFIG_BASE_FULL=yCONFIG_FUTEX=yCONFIG_FUTEX_PI=yCONFIG_EPOLL=yCONFIG_SIGNALFD=yCONFIG_TIMERFD=yCONFIG_EVENTFD=yCONFIG_SHMEM=yCONFIG_AIO=yCONFIG_IO_URING=yCONFIG_ADVISE_SYSCALLS=yCONFIG_MEMBARRIER=yCONFIG_KALLSYMS=yCONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y CONFIG_KCMP=yCONFIG_RSEQ=y
# CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y CONFIG_GUEST_PERF_EVENTS=y CONFIG_PERF_USE_VMALLOC=y
#
# Kernel Performance Events And Counters
#CONFIG_PERF_EVENTS=yCONFIG_DEBUG_PERF_USE_VMALLOC=y
# end of Kernel Performance Events And Counters
CONFIG_SYSTEM_DATA_VERIFICATION=y
# CONFIG_PROFILING is not set
# end of General setup
CONFIG_ARM64=yCONFIG_GCC_SUPPORTS_DYNAMIC_FTRACE_WITH_REGS=yCONFIG_64BIT=yCONFIG_MMU=yCONFIG_ARM64_PAGE_SHIFT=16CONFIG_ARM64_CONT_PTE_SHIFT=5CONFIG_ARM64_CONT_PMD_SHIFT=5CONFIG_ARCH_MMAP_RND_BITS_MIN=14CONFIG_ARCH_MMAP_RND_BITS_MAX=27CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MIN=7CONFIG_ARCH_MMAP_RND_COMPAT_BITS_MAX=16CONFIG_STACKTRACE_SUPPORT=yCONFIG_ILLEGAL_POINTER_VALUE=0xdead000000000000CONFIG_LOCKDEP_SUPPORT=yCONFIG_GENERIC_BUG=yCONFIG_GENERIC_BUG_RELATIVE_POINTERS=yCONFIG_GENERIC_HWEIGHT=yCONFIG_GENERIC_CSUM=yCONFIG_GENERIC_CALIBRATE_DELAY=yCONFIG_ARCH_MHP_MEMMAP_ON_MEMORY_ENABLE=yCONFIG_SMP=yCONFIG_KERNEL_MODE_NEON=yCONFIG_FIX_EARLYCON_MEM=yCONFIG_PGTABLE_LEVELS=2CONFIG_ARCH_SUPPORTS_UPROBES=yCONFIG_ARCH_PROC_KCORE_TEXT=y
#
# Platform selection
#CONFIG_ARCH_ACTIONS=yCONFIG_ARCH_SUNXI=yCONFIG_ARCH_ALPINE=yCONFIG_ARCH_APPLE=y
# CONFIG_ARCH_BCM2835 is not set
# CONFIG_ARCH_BCM4908 is not set
# CONFIG_ARCH_BCM_IPROC is not set
# CONFIG_ARCH_BCMBCA is not setCONFIG_ARCH_BERLIN=yCONFIG_ARCH_BITMAIN=y
# CONFIG_ARCH_BRCMSTB is not setCONFIG_ARCH_EXYNOS=y
# CONFIG_ARCH_SPARX5 is not set
# CONFIG_ARCH_K3 is not set
# CONFIG_ARCH_LAYERSCAPE is not setCONFIG_ARCH_LG1K=yCONFIG_ARCH_HISI=yCONFIG_ARCH_KEEMBAY=yCONFIG_ARCH_MEDIATEK=y
# CONFIG_ARCH_MESON is not setCONFIG_ARCH_MVEBU=y
# CONFIG_ARCH_MXC is not setCONFIG_ARCH_NPCM=yCONFIG_ARCH_QCOM=y
# CONFIG_ARCH_REALTEK is not setCONFIG_ARCH_RENESAS=y
# CONFIG_ARCH_ROCKCHIP is not set
# CONFIG_ARCH_S32 is not set
# CONFIG_ARCH_SEATTLE is not setCONFIG_ARCH_INTEL_SOCFPGA=y
# CONFIG_ARCH_SYNQUACER is not setCONFIG_ARCH_TEGRA=y
# CONFIG_ARCH_TESLA_FSD is not setCONFIG_ARCH_SPRD=y
# CONFIG_ARCH_THUNDER is not set
# CONFIG_ARCH_THUNDER2 is not set
# CONFIG_ARCH_UNIPHIER is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_VISCONTI is not set
# CONFIG_ARCH_XGENE is not setCONFIG_ARCH_ZYNQMP=y
# end of Platform selection
#
# Kernel Features
#
#
# ARM errata workarounds via the alternatives framework #CONFIG_ARM64_WORKAROUND_CLEAN_CACHE=y
# CONFIG_ARM64_ERRATUM_826319 is not set
# CONFIG_ARM64_ERRATUM_827319 is not set
# CONFIG_ARM64_ERRATUM_824069 is not set CONFIG_ARM64_ERRATUM_819472=y CONFIG_ARM64_ERRATUM_832075=y
# CONFIG_ARM64_ERRATUM_834220 is not set
# CONFIG_ARM64_ERRATUM_843419 is not set CONFIG_ARM64_LD_HAS_FIX_ERRATUM_843419=y CONFIG_ARM64_ERRATUM_1024718=y CONFIG_ARM64_WORKAROUND_SPECULATIVE_AT=y
# CONFIG_ARM64_ERRATUM_1165522 is not set CONFIG_ARM64_ERRATUM_1319367=y CONFIG_ARM64_ERRATUM_1530923=y CONFIG_ARM64_WORKAROUND_REPEAT_TLBI=y
# CONFIG_ARM64_ERRATUM_1286807 is not set
# CONFIG_ARM64_ERRATUM_1463225 is not set CONFIG_ARM64_ERRATUM_1542419=y CONFIG_ARM64_ERRATUM_1508412=y
# CONFIG_ARM64_ERRATUM_2051678 is not set CONFIG_ARM64_ERRATUM_2077057=y CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE=y CONFIG_ARM64_ERRATUM_2054223=y CONFIG_ARM64_ERRATUM_2067961=y CONFIG_ARM64_ERRATUM_2441009=y CONFIG_CAVIUM_ERRATUM_22375=y CONFIG_CAVIUM_ERRATUM_23144=y CONFIG_CAVIUM_ERRATUM_23154=y
# CONFIG_CAVIUM_ERRATUM_27456 is not set CONFIG_CAVIUM_ERRATUM_30115=y
# CONFIG_CAVIUM_TX2_ERRATUM_219 is not set
# CONFIG_FUJITSU_ERRATUM_010001 is not set CONFIG_HISILICON_ERRATUM_161600802=y
# CONFIG_QCOM_FALKOR_ERRATUM_1003 is not set
# CONFIG_QCOM_FALKOR_ERRATUM_1009 is not set
# CONFIG_QCOM_QDF2400_ERRATUM_0065 is not set # CONFIG_QCOM_FALKOR_ERRATUM_E1041 is not set # CONFIG_NVIDIA_CARMEL_CNP_ERRATUM is not set # CONFIG_SOCIONEXT_SYNQUACER_PREITS is not set
# end of ARM errata workarounds via the alternatives framework
# CONFIG_ARM64_4K_PAGES is not set
# CONFIG_ARM64_16K_PAGES is not setCONFIG_ARM64_64K_PAGES=yCONFIG_ARM64_VA_BITS_42=y
# CONFIG_ARM64_VA_BITS_48 is not setCONFIG_ARM64_VA_BITS=42CONFIG_ARM64_PA_BITS_48=yCONFIG_ARM64_PA_BITS=48CONFIG_CPU_BIG_ENDIAN=y
# CONFIG_CPU_LITTLE_ENDIAN is not setCONFIG_SCHED_MC=yCONFIG_SCHED_CLUSTER=yCONFIG_SCHED_SMT=yCONFIG_NR_CPUS=256CONFIG_HOTPLUG_CPU=yCONFIG_NUMA=yCONFIG_NODES_SHIFT=4
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not setCONFIG_HZ_1000=yCONFIG_HZ=1000CONFIG_SCHED_HRTICK=yCONFIG_ARCH_SPARSEMEM_ENABLE=yCONFIG_HW_PERF_EVENTS=yCONFIG_CC_HAVE_SHADOW_CALL_STACK=yCONFIG_PARAVIRT=yCONFIG_PARAVIRT_TIME_ACCOUNTING=yCONFIG_KEXEC=yCONFIG_KEXEC_FILE=y
# CONFIG_KEXEC_SIG is not setCONFIG_CRASH_DUMP=yCONFIG_TRANS_TABLE=yCONFIG_XEN_DOM0=yCONFIG_XEN=yCONFIG_FORCE_MAX_ZONEORDER=14CONFIG_UNMAP_KERNEL_AT_EL0=yCONFIG_MITIGATE_SPECTRE_BRANCH_HISTORY=y
# CONFIG_RODATA_FULL_DEFAULT_ENABLED is not setCONFIG_ARM64_SW_TTBR0_PAN=yCONFIG_ARM64_TAGGED_ADDR_ABI=y
#
# ARMv8.1 architectural features
#
# CONFIG_ARM64_HW_AFDBM is not set
# CONFIG_ARM64_PAN is not setCONFIG_AS_HAS_LDAPR=yCONFIG_AS_HAS_LSE_ATOMICS=y
# end of ARMv8.1 architectural features
#
# ARMv8.2 architectural features
#CONFIG_AS_HAS_ARMV8_2=yCONFIG_AS_HAS_SHA3=y
# CONFIG_ARM64_PMEM is not set
# CONFIG_ARM64_RAS_EXTN is not set
# end of ARMv8.2 architectural features
#
# ARMv8.3 architectural features
#CONFIG_ARM64_PTR_AUTH=yCONFIG_ARM64_PTR_AUTH_KERNEL=yCONFIG_CC_HAS_BRANCH_PROT_PAC_RET=yCONFIG_CC_HAS_SIGN_RETURN_ADDRESS=yCONFIG_AS_HAS_PAC=yCONFIG_AS_HAS_CFI_NEGATE_RA_STATE=y
# end of ARMv8.3 architectural features
#
# ARMv8.4 architectural features
#
# CONFIG_ARM64_AMU_EXTN is not setCONFIG_AS_HAS_ARMV8_4=y
# CONFIG_ARM64_TLB_RANGE is not set
# end of ARMv8.4 architectural features
#
# ARMv8.5 architectural features
#CONFIG_AS_HAS_ARMV8_5=y
# CONFIG_ARM64_BTI is not setCONFIG_CC_HAS_BRANCH_PROT_PAC_RET_BTI=yCONFIG_ARM64_E0PD=yCONFIG_ARM64_AS_HAS_MTE=y
# end of ARMv8.5 architectural features
#
# ARMv8.7 architectural features
#
# end of ARMv8.7 architectural features
CONFIG_ARM64_SVE=yCONFIG_ARM64_SME=yCONFIG_ARM64_MODULE_PLTS=y
# CONFIG_ARM64_PSEUDO_NMI is not setCONFIG_RELOCATABLE=y
# CONFIG_RANDOMIZE_BASE is not setCONFIG_CC_HAVE_STACKPROTECTOR_SYSREG=yCONFIG_STACKPROTECTOR_PER_TASK=yCONFIG_ARCH_NR_GPIO=2048
# end of Kernel Features
#
# Boot options
#CONFIG_CMDLINE=""
# end of Boot options
#
# Power management options
#CONFIG_SUSPEND=yCONFIG_SUSPEND_FREEZER=yCONFIG_PM_SLEEP=yCONFIG_PM_SLEEP_SMP=yCONFIG_PM_AUTOSLEEP=y
# CONFIG_PM_USERSPACE_AUTOSLEEP is not set
# CONFIG_PM_WAKELOCKS is not setCONFIG_PM=y
# CONFIG_PM_DEBUG is not setCONFIG_PM_CLK=yCONFIG_PM_GENERIC_DOMAINS=yCONFIG_WQ_POWER_EFFICIENT_DEFAULT=yCONFIG_PM_GENERIC_DOMAINS_SLEEP=yCONFIG_PM_GENERIC_DOMAINS_OF=yCONFIG_CPU_PM=y
# CONFIG_ENERGY_MODEL is not setCONFIG_ARCH_HIBERNATION_POSSIBLE=yCONFIG_ARCH_SUSPEND_POSSIBLE=y
# end of Power management options
#
# CPU Power Management
#
#
# CPU Idle
#
# CONFIG_CPU_IDLE is not set
# end of CPU Idle
#
# CPU Frequency scaling
#CONFIG_CPU_FREQ=y CONFIG_CPU_FREQ_GOV_ATTR_SET=y CONFIG_CPU_FREQ_STAT=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set # CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set # CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set # CONFIG_CPU_FREQ_GOV_POWERSAVE is not set CONFIG_CPU_FREQ_GOV_USERSPACE=y
# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
#
# CPU frequency scaling drivers
#CONFIG_CPUFREQ_DT=m CONFIG_CPUFREQ_DT_PLATDEV=y
# CONFIG_ARM_ALLWINNER_SUN50I_CPUFREQ_NVMEM is not set # CONFIG_ARM_ARMADA_37XX_CPUFREQ is not set CONFIG_ARM_ARMADA_8K_CPUFREQ=m CONFIG_ARM_BRCMSTB_AVS_CPUFREQ=m CONFIG_ARM_MEDIATEK_CPUFREQ=y
# CONFIG_ARM_MEDIATEK_CPUFREQ_HW is not set CONFIG_ARM_QCOM_CPUFREQ_HW=m CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
# CONFIG_ARM_SCMI_CPUFREQ is not set CONFIG_ARM_TEGRA20_CPUFREQ=m
# CONFIG_ARM_TEGRA124_CPUFREQ is not set
# CONFIG_QORIQ_CPUFREQ is not set
# end of CPU Frequency scaling # end of CPU Power Management
CONFIG_IRQ_BYPASS_MANAGER=yCONFIG_HAVE_KVM=yCONFIG_HAVE_KVM_IRQCHIP=yCONFIG_HAVE_KVM_IRQFD=yCONFIG_HAVE_KVM_IRQ_ROUTING=yCONFIG_HAVE_KVM_EVENTFD=yCONFIG_KVM_MMIO=yCONFIG_HAVE_KVM_MSI=yCONFIG_HAVE_KVM_CPU_RELAX_INTERCEPT=yCONFIG_KVM_VFIO=yCONFIG_HAVE_KVM_ARCH_TLB_FLUSH_ALL=yCONFIG_KVM_GENERIC_DIRTYLOG_READ_PROTECT=yCONFIG_HAVE_KVM_IRQ_BYPASS=yCONFIG_HAVE_KVM_VCPU_RUN_PID_CHANGE=yCONFIG_KVM_XFER_TO_GUEST_WORK=yCONFIG_VIRTUALIZATION=yCONFIG_KVM=y
# CONFIG_NVHE_EL2_DEBUG is not set
# CONFIG_ARM64_CRYPTO is not set
#
# General architecture-dependent options
#CONFIG_CRASH_CORE=yCONFIG_KEXEC_CORE=y
# CONFIG_KPROBES is not set
# CONFIG_JUMP_LABEL is not set CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y CONFIG_HAVE_IOREMAP_PROT=y CONFIG_HAVE_KPROBES=y CONFIG_HAVE_KRETPROBES=y CONFIG_ARCH_CORRECT_STACKTRACE_ON_KRETPROBE=y CONFIG_HAVE_FUNCTION_ERROR_INJECTION=y CONFIG_HAVE_NMI=y CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_TRACE_IRQFLAGS_NMI_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_HAVE_DMA_CONTIGUOUS=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_GENERIC_IDLE_POLL_SETUP=y CONFIG_ARCH_HAS_FORTIFY_SOURCE=y CONFIG_ARCH_HAS_KEEPINITRD=y CONFIG_ARCH_HAS_SET_MEMORY=y CONFIG_ARCH_HAS_SET_DIRECT_MAP=y CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y CONFIG_ARCH_WANTS_NO_INSTR=y CONFIG_HAVE_ASM_MODVERSIONS=y CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y CONFIG_HAVE_RSEQ=y CONFIG_HAVE_FUNCTION_ARG_ACCESS_API=y CONFIG_HAVE_HW_BREAKPOINT=y CONFIG_HAVE_PERF_REGS=y CONFIG_HAVE_PERF_USER_STACK_DUMP=y CONFIG_HAVE_ARCH_JUMP_LABEL=y CONFIG_HAVE_ARCH_JUMP_LABEL_RELATIVE=y CONFIG_MMU_GATHER_TABLE_FREE=y CONFIG_MMU_GATHER_RCU_TABLE_FREE=y CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y CONFIG_HAVE_CMPXCHG_LOCAL=y CONFIG_HAVE_CMPXCHG_DOUBLE=y CONFIG_HAVE_ARCH_SECCOMP=y CONFIG_HAVE_ARCH_SECCOMP_FILTER=y
# CONFIG_SECCOMP is not set CONFIG_HAVE_ARCH_STACKLEAK=y CONFIG_HAVE_STACKPROTECTOR=y CONFIG_STACKPROTECTOR=y CONFIG_STACKPROTECTOR_STRONG=y CONFIG_ARCH_SUPPORTS_SHADOW_CALL_STACK=y
# CONFIG_SHADOW_CALL_STACK is not set CONFIG_ARCH_SUPPORTS_LTO_CLANG_THIN=y CONFIG_LTO_NONE=y CONFIG_ARCH_SUPPORTS_CFI_CLANG=y CONFIG_HAVE_CONTEXT_TRACKING_USER=y CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y CONFIG_HAVE_MOVE_PUD=y CONFIG_HAVE_MOVE_PMD=y CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE=y CONFIG_HAVE_ARCH_HUGE_VMAP=y CONFIG_HAVE_MOD_ARCH_SPECIFIC=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_ARCH_HAS_ELF_RANDOMIZE=y CONFIG_HAVE_ARCH_MMAP_RND_BITS=y CONFIG_ARCH_MMAP_RND_BITS=14 CONFIG_PAGE_SIZE_LESS_THAN_256KB=y CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y CONFIG_ISA_BUS_API=y CONFIG_CLONE_BACKWARDS=y
# CONFIG_COMPAT_32BIT_TIME is not set CONFIG_HAVE_ARCH_VMAP_STACK=y
# CONFIG_VMAP_STACK is not set CONFIG_HAVE_ARCH_RANDOMIZE_KSTACK_OFFSET=y CONFIG_RANDOMIZE_KSTACK_OFFSET=y
# CONFIG_RANDOMIZE_KSTACK_OFFSET_DEFAULT is not set CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y CONFIG_STRICT_KERNEL_RWX=y CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y CONFIG_STRICT_MODULE_RWX=y CONFIG_HAVE_ARCH_COMPILER_H=y CONFIG_HAVE_ARCH_PREL32_RELOCATIONS=y
# CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_HAS_RELR=y CONFIG_HAVE_PREEMPT_DYNAMIC=y CONFIG_HAVE_PREEMPT_DYNAMIC_KEY=y CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y CONFIG_ARCH_SUPPORTS_PAGE_TABLE_CHECK=y CONFIG_ARCH_HAVE_TRACE_MMIO_ACCESS=y
#
# GCOV-based kernel profiling
#CONFIG_GCOV_KERNEL=yCONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
# end of GCOV-based kernel profiling
CONFIG_HAVE_GCC_PLUGINS=y
# CONFIG_GCC_PLUGINS is not set
# end of General architecture-dependent options
CONFIG_RT_MUTEXES=yCONFIG_BASE_SMALL=0CONFIG_MODULE_SIG_FORMAT=yCONFIG_MODULES=yCONFIG_MODULE_FORCE_LOAD=y
# CONFIG_MODULE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set CONFIG_MODULE_SIG=yCONFIG_MODULE_SIG_FORCE=yCONFIG_MODULE_SIG_ALL=y
# CONFIG_MODULE_SIG_SHA1 is not set CONFIG_MODULE_SIG_SHA224=y
# CONFIG_MODULE_SIG_SHA256 is not set
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set CONFIG_MODULE_SIG_HASH="sha224"
# CONFIG_MODULE_COMPRESS_NONE is not set
# CONFIG_MODULE_COMPRESS_GZIP is not set
# CONFIG_MODULE_COMPRESS_XZ is not set CONFIG_MODULE_COMPRESS_ZSTD=y
# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set CONFIG_MODPROBE_PATH="/sbin/modprobe" CONFIG_MODULES_TREE_LOOKUP=yCONFIG_BLOCK=y
# CONFIG_BLOCK_LEGACY_AUTOLOAD is not set CONFIG_BLK_DEV_BSG_COMMON=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY_T10=y CONFIG_BLK_DEV_ZONED=yCONFIG_BLK_WBT=yCONFIG_BLK_WBT_MQ=yCONFIG_BLK_DEBUG_FS=yCONFIG_BLK_DEBUG_FS_ZONED=yCONFIG_BLK_SED_OPAL=y CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y
#
# Partition Types
#CONFIG_PARTITION_ADVANCED=y
# CONFIG_ACORN_PARTITION is not set
# CONFIG_AIX_PARTITION is not setCONFIG_OSF_PARTITION=yCONFIG_AMIGA_PARTITION=yCONFIG_ATARI_PARTITION=y
# CONFIG_MAC_PARTITION is not set
# CONFIG_MSDOS_PARTITION is not setCONFIG_LDM_PARTITION=y
# CONFIG_LDM_DEBUG is not setCONFIG_SGI_PARTITION=y
# CONFIG_ULTRIX_PARTITION is not set
# CONFIG_SUN_PARTITION is not set
# CONFIG_KARMA_PARTITION is not setCONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
# CONFIG_CMDLINE_PARTITION is not set
# end of Partition Types
CONFIG_BLK_MQ_PCI=yCONFIG_BLK_MQ_VIRTIO=yCONFIG_BLK_PM=y
#
# IO Schedulers
#CONFIG_MQ_IOSCHED_DEADLINE=y
# CONFIG_MQ_IOSCHED_KYBER is not set
# CONFIG_IOSCHED_BFQ is not set
# end of IO Schedulers
CONFIG_PREEMPT_NOTIFIERS=yCONFIG_ASN1=yCONFIG_ARCH_INLINE_SPIN_TRYLOCK=yCONFIG_ARCH_INLINE_SPIN_TRYLOCK_BH=yCONFIG_ARCH_INLINE_SPIN_LOCK=yCONFIG_ARCH_INLINE_SPIN_LOCK_BH=yCONFIG_ARCH_INLINE_SPIN_LOCK_IRQ=yCONFIG_ARCH_INLINE_SPIN_LOCK_IRQSAVE=yCONFIG_ARCH_INLINE_SPIN_UNLOCK=yCONFIG_ARCH_INLINE_SPIN_UNLOCK_BH=yCONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQ=yCONFIG_ARCH_INLINE_SPIN_UNLOCK_IRQRESTORE=yCONFIG_ARCH_INLINE_READ_LOCK=yCONFIG_ARCH_INLINE_READ_LOCK_BH=yCONFIG_ARCH_INLINE_READ_LOCK_IRQ=yCONFIG_ARCH_INLINE_READ_LOCK_IRQSAVE=yCONFIG_ARCH_INLINE_READ_UNLOCK=yCONFIG_ARCH_INLINE_READ_UNLOCK_BH=yCONFIG_ARCH_INLINE_READ_UNLOCK_IRQ=yCONFIG_ARCH_INLINE_READ_UNLOCK_IRQRESTORE=yCONFIG_ARCH_INLINE_WRITE_LOCK=yCONFIG_ARCH_INLINE_WRITE_LOCK_BH=yCONFIG_ARCH_INLINE_WRITE_LOCK_IRQ=yCONFIG_ARCH_INLINE_WRITE_LOCK_IRQSAVE=yCONFIG_ARCH_INLINE_WRITE_UNLOCK=yCONFIG_ARCH_INLINE_WRITE_UNLOCK_BH=yCONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQ=yCONFIG_ARCH_INLINE_WRITE_UNLOCK_IRQRESTORE=yCONFIG_UNINLINE_SPIN_UNLOCK=yCONFIG_ARCH_SUPPORTS_ATOMIC_RMW=yCONFIG_MUTEX_SPIN_ON_OWNER=yCONFIG_RWSEM_SPIN_ON_OWNER=yCONFIG_LOCK_SPIN_ON_OWNER=yCONFIG_ARCH_USE_QUEUED_SPINLOCKS=yCONFIG_QUEUED_SPINLOCKS=yCONFIG_ARCH_USE_QUEUED_RWLOCKS=yCONFIG_QUEUED_RWLOCKS=yCONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=yCONFIG_ARCH_HAS_SYSCALL_WRAPPER=yCONFIG_FREEZER=y
#
# Executable file formats
#CONFIG_BINFMT_ELF=yCONFIG_ARCH_BINFMT_ELF_STATE=yCONFIG_ARCH_BINFMT_ELF_EXTRA_PHDRS=yCONFIG_ARCH_HAVE_ELF_PROT=yCONFIG_ARCH_USE_GNU_PROPERTY=yCONFIG_ELFCORE=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not setCONFIG_BINFMT_SCRIPT=y
# CONFIG_BINFMT_MISC is not setCONFIG_COREDUMP=y
# end of Executable file formats
#
# Memory Management options
#
# CONFIG_SWAP is not setCONFIG_ZSMALLOC=m
# CONFIG_ZSMALLOC_STAT is not set
#
# SLAB allocator options
#CONFIG_SLAB=y
# CONFIG_SLUB is not setCONFIG_SLAB_MERGE_DEFAULT=y
# CONFIG_SLAB_FREELIST_RANDOM is not set
# CONFIG_SLAB_FREELIST_HARDENED is not set
# end of SLAB allocator options
CONFIG_SHUFFLE_PAGE_ALLOCATOR=y
# CONFIG_COMPAT_BRK is not setCONFIG_SPARSEMEM=yCONFIG_SPARSEMEM_EXTREME=yCONFIG_SPARSEMEM_VMEMMAP_ENABLE=yCONFIG_SPARSEMEM_VMEMMAP=yCONFIG_HAVE_FAST_GUP=yCONFIG_ARCH_KEEP_MEMBLOCK=yCONFIG_MEMORY_ISOLATION=yCONFIG_EXCLUSIVE_SYSTEM_RAM=yCONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=yCONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
# CONFIG_MEMORY_HOTPLUG is not setCONFIG_SPLIT_PTLOCK_CPUS=4CONFIG_COMPACTION=yCONFIG_PAGE_REPORTING=yCONFIG_MIGRATION=yCONFIG_ARCH_ENABLE_THP_MIGRATION=yCONFIG_CONTIG_ALLOC=yCONFIG_PHYS_ADDR_T_64BIT=yCONFIG_MMU_NOTIFIER=y
# CONFIG_KSM is not setCONFIG_DEFAULT_MMAP_MIN_ADDR=4096CONFIG_ARCH_SUPPORTS_MEMORY_FAILURE=yCONFIG_MEMORY_FAILURE=yCONFIG_HWPOISON_INJECT=mCONFIG_TRANSPARENT_HUGEPAGE=yCONFIG_TRANSPARENT_HUGEPAGE_ALWAYS=y
# CONFIG_TRANSPARENT_HUGEPAGE_MADVISE is not setCONFIG_READ_ONLY_THP_FOR_FS=yCONFIG_NEED_PER_CPU_EMBED_FIRST_CHUNK=yCONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=yCONFIG_USE_PERCPU_NUMA_NODE_ID=yCONFIG_HAVE_SETUP_PER_CPU_AREA=yCONFIG_CMA=y
# CONFIG_CMA_DEBUG is not set
# CONFIG_CMA_DEBUGFS is not setCONFIG_CMA_SYSFS=yCONFIG_CMA_AREAS=19CONFIG_GENERIC_EARLY_IOREMAP=y
# CONFIG_DEFERRED_STRUCT_PAGE_INIT is not setCONFIG_PAGE_IDLE_FLAG=yCONFIG_IDLE_PAGE_TRACKING=yCONFIG_ARCH_HAS_CACHE_LINE_SIZE=yCONFIG_ARCH_HAS_CURRENT_STACK_POINTER=yCONFIG_ARCH_HAS_PTE_DEVMAP=yCONFIG_ZONE_DMA=yCONFIG_ZONE_DMA32=yCONFIG_GET_FREE_REGION=yCONFIG_VM_EVENT_COUNTERS=y
# CONFIG_PERCPU_STATS is not set
# CONFIG_GUP_TEST is not setCONFIG_ARCH_HAS_PTE_SPECIAL=yCONFIG_SECRETMEM=y
# CONFIG_ANON_VMA_NAME is not setCONFIG_USERFAULTFD=yCONFIG_HAVE_ARCH_USERFAULTFD_MINOR=y
#
# Data Access Monitoring
#
# CONFIG_DAMON is not set
# end of Data Access Monitoring # end of Memory Management options
# CONFIG_NET is not set
#
# Device Drivers
#CONFIG_ARM_AMBA=yCONFIG_TEGRA_AHB=yCONFIG_HAVE_PCI=yCONFIG_PCI=yCONFIG_PCI_DOMAINS=yCONFIG_PCI_DOMAINS_GENERIC=yCONFIG_PCI_SYSCALL=y
# CONFIG_PCIEPORTBUS is not setCONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEFAULT is not set
# CONFIG_PCIEASPM_POWERSAVE is not setCONFIG_PCIEASPM_POWER_SUPERSAVE=y
# CONFIG_PCIEASPM_PERFORMANCE is not set
# CONFIG_PCIE_PTM is not setCONFIG_PCI_MSI=yCONFIG_PCI_MSI_IRQ_DOMAIN=yCONFIG_PCI_QUIRKS=y
# CONFIG_PCI_DEBUG is not setCONFIG_PCI_REALLOC_ENABLE_AUTO=y
# CONFIG_PCI_STUB is not set
# CONFIG_PCI_PF_STUB is not setCONFIG_PCI_ATS=yCONFIG_PCI_DOE=yCONFIG_PCI_ECAM=yCONFIG_PCI_IOV=yCONFIG_PCI_PRI=y
# CONFIG_PCI_PASID is not setCONFIG_VGA_ARB=yCONFIG_VGA_ARB_MAX_GPUS=16CONFIG_HOTPLUG_PCI=yCONFIG_HOTPLUG_PCI_CPCI=y
# CONFIG_HOTPLUG_PCI_SHPC is not set
#
# PCI controller drivers
#
# CONFIG_PCI_AARDVARK is not setCONFIG_PCIE_XILINX_NWL=yCONFIG_PCI_FTPCI100=yCONFIG_PCI_TEGRA=yCONFIG_PCIE_RCAR_HOST=y
# CONFIG_PCIE_RCAR_EP is not setCONFIG_PCI_HOST_COMMON=yCONFIG_PCI_HOST_GENERIC=mCONFIG_PCIE_XILINX=yCONFIG_PCIE_XILINX_CPM=yCONFIG_PCI_XGENE=yCONFIG_PCI_XGENE_MSI=yCONFIG_PCI_V3_SEMI=y
# CONFIG_PCI_VERSATILE is not setCONFIG_PCIE_ALTERA=mCONFIG_PCIE_ALTERA_MSI=mCONFIG_PCI_HOST_THUNDER_PEM=yCONFIG_PCI_HOST_THUNDER_ECAM=yCONFIG_PCIE_ROCKCHIP=yCONFIG_PCIE_ROCKCHIP_HOST=yCONFIG_PCIE_ROCKCHIP_EP=yCONFIG_PCIE_MEDIATEK=yCONFIG_PCIE_MEDIATEK_GEN3=mCONFIG_PCIE_BRCMSTB=mCONFIG_PCI_LOONGSON=y
# CONFIG_PCIE_MICROCHIP_HOST is not set
# CONFIG_PCIE_APPLE is not setCONFIG_PCIE_MT7621=m
#
# DesignWare PCI Core Support
#CONFIG_PCIE_DW=yCONFIG_PCIE_DW_HOST=yCONFIG_PCIE_DW_EP=yCONFIG_PCI_DRA7XX=mCONFIG_PCI_DRA7XX_HOST=mCONFIG_PCI_DRA7XX_EP=m
# CONFIG_PCIE_DW_PLAT_HOST is not set
# CONFIG_PCIE_DW_PLAT_EP is not setCONFIG_PCI_EXYNOS=m
# CONFIG_PCI_IMX6 is not set
# CONFIG_PCIE_SPEAR13XX is not setCONFIG_PCI_KEYSTONE=y
# CONFIG_PCI_KEYSTONE_HOST is not setCONFIG_PCI_KEYSTONE_EP=yCONFIG_PCI_LAYERSCAPE=yCONFIG_PCI_LAYERSCAPE_EP=y
# CONFIG_PCI_HISI is not setCONFIG_PCIE_QCOM=yCONFIG_PCIE_QCOM_EP=m
# CONFIG_PCIE_ARMADA_8K is not setCONFIG_PCIE_ARTPEC6=y
# CONFIG_PCIE_ARTPEC6_HOST is not setCONFIG_PCIE_ARTPEC6_EP=y
# CONFIG_PCIE_ROCKCHIP_DW_HOST is not setCONFIG_PCIE_INTEL_GW=yCONFIG_PCIE_KEEMBAY=yCONFIG_PCIE_KEEMBAY_HOST=y
# CONFIG_PCIE_KEEMBAY_EP is not setCONFIG_PCIE_KIRIN=mCONFIG_PCIE_HISI_STB=y
# CONFIG_PCI_MESON is not setCONFIG_PCIE_TEGRA194=yCONFIG_PCIE_TEGRA194_HOST=mCONFIG_PCIE_TEGRA194_EP=yCONFIG_PCIE_VISCONTI_HOST=y
# CONFIG_PCIE_UNIPHIER is not setCONFIG_PCIE_UNIPHIER_EP=yCONFIG_PCIE_AL=yCONFIG_PCIE_FU740=y
# end of DesignWare PCI Core Support
#
# Mobiveil PCIe Core Support
#CONFIG_PCIE_MOBIVEIL=yCONFIG_PCIE_MOBIVEIL_HOST=yCONFIG_PCIE_MOBIVEIL_PLAT=yCONFIG_PCIE_LAYERSCAPE_GEN4=y
# end of Mobiveil PCIe Core Support
#
# Cadence PCIe controllers support
#CONFIG_PCIE_CADENCE=yCONFIG_PCIE_CADENCE_HOST=yCONFIG_PCIE_CADENCE_EP=yCONFIG_PCIE_CADENCE_PLAT=yCONFIG_PCIE_CADENCE_PLAT_HOST=yCONFIG_PCIE_CADENCE_PLAT_EP=y
# CONFIG_PCI_J721E_HOST is not set
# CONFIG_PCI_J721E_EP is not set
# end of Cadence PCIe controllers support # end of PCI controller drivers
#
# PCI Endpoint
#CONFIG_PCI_ENDPOINT=yCONFIG_PCI_ENDPOINT_CONFIGFS=y
# CONFIG_PCI_EPF_TEST is not set
# CONFIG_PCI_EPF_NTB is not setCONFIG_PCI_EPF_VNTB=m
# end of PCI Endpoint
#
# PCI switch controller drivers
#CONFIG_PCI_SW_SWITCHTEC=m
# end of PCI switch controller drivers
CONFIG_CXL_BUS=y
# CONFIG_CXL_PCI is not setCONFIG_CXL_PMEM=yCONFIG_CXL_PORT=yCONFIG_CXL_REGION=yCONFIG_PCCARD=yCONFIG_PCMCIA=y
# CONFIG_PCMCIA_LOAD_CIS is not setCONFIG_CARDBUS=y
#
# PC-card bridges
#
# CONFIG_YENTA is not setCONFIG_PD6729=mCONFIG_I82092=yCONFIG_PCCARD_NONSTATIC=yCONFIG_RAPIDIO=yCONFIG_RAPIDIO_DISC_TIMEOUT=30CONFIG_RAPIDIO_ENABLE_RX_TX_PORTS=yCONFIG_RAPIDIO_DMA_ENGINE=y
# CONFIG_RAPIDIO_DEBUG is not setCONFIG_RAPIDIO_ENUM_BASIC=mCONFIG_RAPIDIO_CHMAN=mCONFIG_RAPIDIO_MPORT_CDEV=y
#
# RapidIO Switch drivers
#CONFIG_RAPIDIO_CPS_XX=y
# CONFIG_RAPIDIO_CPS_GEN2 is not set
# CONFIG_RAPIDIO_RXS_GEN3 is not set
# end of RapidIO Switch drivers
#
# Generic Driver Options
#CONFIG_AUXILIARY_BUS=yCONFIG_UEVENT_HELPER=yCONFIG_UEVENT_HELPER_PATH=""
# CONFIG_DEVTMPFS is not setCONFIG_STANDALONE=yCONFIG_PREVENT_FIRMWARE_BUILD=y
#
# Firmware loader
#CONFIG_FW_LOADER=yCONFIG_FW_LOADER_PAGED_BUF=yCONFIG_FW_LOADER_SYSFS=yCONFIG_EXTRA_FIRMWARE=""CONFIG_FW_LOADER_USER_HELPER=yCONFIG_FW_LOADER_USER_HELPER_FALLBACK=y
# CONFIG_FW_LOADER_COMPRESS is not set
# CONFIG_FW_CACHE is not setCONFIG_FW_UPLOAD=y
# end of Firmware loader
CONFIG_WANT_DEV_COREDUMP=yCONFIG_ALLOW_DEV_COREDUMP=yCONFIG_DEV_COREDUMP=yCONFIG_DEBUG_DRIVER=yCONFIG_DEBUG_DEVRES=y
# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set
# CONFIG_TEST_ASYNC_DRIVER_PROBE is not setCONFIG_SYS_HYPERVISOR=yCONFIG_GENERIC_CPU_AUTOPROBE=yCONFIG_GENERIC_CPU_VULNERABILITIES=yCONFIG_SOC_BUS=yCONFIG_REGMAP=yCONFIG_REGMAP_AC97=mCONFIG_REGMAP_I2C=yCONFIG_REGMAP_SPMI=mCONFIG_REGMAP_W1=yCONFIG_REGMAP_MMIO=yCONFIG_REGMAP_IRQ=yCONFIG_REGMAP_SOUNDWIRE=mCONFIG_REGMAP_SOUNDWIRE_MBQ=mCONFIG_REGMAP_I3C=mCONFIG_DMA_SHARED_BUFFER=yCONFIG_DMA_FENCE_TRACE=yCONFIG_GENERIC_ARCH_TOPOLOGY=yCONFIG_GENERIC_ARCH_NUMA=y
# end of Generic Driver Options
#
# Bus devices
#CONFIG_ARM_CCI=yCONFIG_ARM_CCI400_COMMON=yCONFIG_ARM_INTEGRATOR_LM=y
# CONFIG_BRCMSTB_GISB_ARB is not setCONFIG_BT1_APB=y
# CONFIG_BT1_AXI is not setCONFIG_HISILICON_LPC=y
# CONFIG_INTEL_IXP4XX_EB is not set
# CONFIG_QCOM_EBI2 is not set
# CONFIG_QCOM_SSC_BLOCK_BUS is not set
# CONFIG_SUN50I_DE2_BUS is not setCONFIG_SUNXI_RSB=mCONFIG_TEGRA_ACONNECT=m
# CONFIG_TEGRA_GMI is not setCONFIG_VEXPRESS_CONFIG=yCONFIG_FSL_MC_BUS=y
# CONFIG_FSL_MC_UAPI_SUPPORT is not setCONFIG_MHI_BUS=m
# CONFIG_MHI_BUS_DEBUG is not set
# CONFIG_MHI_BUS_PCI_GENERIC is not setCONFIG_MHI_BUS_EP=m
# end of Bus devices
#
# Firmware Drivers
#
#
# ARM System Control and Management Interface Protocol #CONFIG_ARM_SCMI_PROTOCOL=m CONFIG_ARM_SCMI_HAVE_TRANSPORT=y CONFIG_ARM_SCMI_HAVE_MSG=y
# CONFIG_ARM_SCMI_TRANSPORT_SMC is not set CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y
# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE is not set CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE=y
# CONFIG_ARM_SCMI_POWER_DOMAIN is not set CONFIG_ARM_SCMI_POWER_CONTROL=y
# end of ARM System Control and Management Interface Protocol
CONFIG_ARM_SCPI_POWER_DOMAIN=y
# CONFIG_FW_CFG_SYSFS is not set CONFIG_INTEL_STRATIX10_SERVICE=y CONFIG_INTEL_STRATIX10_RSU=m CONFIG_QCOM_SCM=y
# CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT is not set CONFIG_ARM_FFA_TRANSPORT=m CONFIG_ARM_FFA_SMCCC=y
# CONFIG_BCM47XX_NVRAM is not set CONFIG_CS_DSP=mCONFIG_GOOGLE_FIRMWARE=y
# CONFIG_GOOGLE_COREBOOT_TABLE is not set CONFIG_ARM_PSCI_FW=y CONFIG_HAVE_ARM_SMCCC=y CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y
# CONFIG_ARM_SMCCC_SOC_ID is not set
#
# Tegra firmware driver
#CONFIG_TEGRA_IVC=y
# end of Tegra firmware driver
#
# Zynq MPSoC Firmware Drivers
#CONFIG_ZYNQMP_FIRMWARE=yCONFIG_ZYNQMP_FIRMWARE_DEBUG=y
# end of Zynq MPSoC Firmware Drivers # end of Firmware Drivers
CONFIG_GNSS=mCONFIG_MTD=yCONFIG_MTD_TESTS=m
#
# Partition parsers
#CONFIG_MTD_AR7_PARTS=yCONFIG_MTD_BCM63XX_PARTS=yCONFIG_MTD_CMDLINE_PARTS=y
# CONFIG_MTD_OF_PARTS is not setCONFIG_MTD_PARSER_IMAGETAG=yCONFIG_MTD_AFS_PARTS=y
# CONFIG_MTD_PARSER_TRX is not set
# CONFIG_MTD_SHARPSL_PARTS is not setCONFIG_MTD_REDBOOT_PARTS=yCONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
# end of Partition parsers
#
# User Modules And Translation Layers
#CONFIG_MTD_BLKDEVS=yCONFIG_MTD_BLOCK=mCONFIG_MTD_BLOCK_RO=m
#
# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. #
# CONFIG_FTL is not set
# CONFIG_NFTL is not setCONFIG_INFTL=mCONFIG_RFD_FTL=yCONFIG_SSFDC=y
# CONFIG_SM_FTL is not setCONFIG_MTD_OOPS=y
# CONFIG_MTD_PARTITIONED_MASTER is not set
#
# RAM/ROM/Flash chip drivers
#CONFIG_MTD_CFI=yCONFIG_MTD_JEDECPROBE=mCONFIG_MTD_GEN_PROBE=yCONFIG_MTD_CFI_ADV_OPTIONS=yCONFIG_MTD_CFI_NOSWAP=y
# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
# CONFIG_MTD_CFI_GEOMETRY is not setCONFIG_MTD_MAP_BANK_WIDTH_1=yCONFIG_MTD_MAP_BANK_WIDTH_2=yCONFIG_MTD_MAP_BANK_WIDTH_4=yCONFIG_MTD_CFI_I1=yCONFIG_MTD_CFI_I2=y
# CONFIG_MTD_OTP is not setCONFIG_MTD_CFI_INTELEXT=mCONFIG_MTD_CFI_AMDSTD=y
# CONFIG_MTD_CFI_STAA is not setCONFIG_MTD_CFI_UTIL=yCONFIG_MTD_RAM=y
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
# end of RAM/ROM/Flash chip drivers
#
# Mapping drivers for chip access
#CONFIG_MTD_COMPLEX_MAPPINGS=yCONFIG_MTD_PHYSMAP=yCONFIG_MTD_PHYSMAP_COMPAT=yCONFIG_MTD_PHYSMAP_START=0x8000000CONFIG_MTD_PHYSMAP_LEN=0CONFIG_MTD_PHYSMAP_BANKWIDTH=2CONFIG_MTD_PHYSMAP_OF=yCONFIG_MTD_PHYSMAP_BT1_ROM=y
# CONFIG_MTD_PHYSMAP_VERSATILE is not set
# CONFIG_MTD_PHYSMAP_GEMINI is not set
# CONFIG_MTD_PHYSMAP_GPIO_ADDR is not setCONFIG_MTD_SC520CDP=mCONFIG_MTD_NETSC520=m
# CONFIG_MTD_TS5500 is not set
# CONFIG_MTD_PCI is not set
# CONFIG_MTD_PCMCIA is not set
# CONFIG_MTD_INTEL_VR_NOR is not setCONFIG_MTD_PLATRAM=y
# end of Mapping drivers for chip access
#
# Self-contained MTD device drivers
#CONFIG_MTD_PMC551=y
# CONFIG_MTD_PMC551_BUGFIX is not setCONFIG_MTD_PMC551_DEBUG=yCONFIG_MTD_SPEAR_SMI=mCONFIG_MTD_SLRAM=y
# CONFIG_MTD_PHRAM is not setCONFIG_MTD_MTDRAM=mCONFIG_MTDRAM_TOTAL_SIZE=4096CONFIG_MTDRAM_ERASE_SIZE=128CONFIG_MTD_BLOCK2MTD=m
#
# Disk-On-Chip Device Drivers
#CONFIG_MTD_DOCG3=yCONFIG_BCH_CONST_M=14CONFIG_BCH_CONST_T=4
# end of Self-contained MTD device drivers
#
# NAND
#CONFIG_MTD_NAND_CORE=yCONFIG_MTD_ONENAND=mCONFIG_MTD_ONENAND_VERIFY_WRITE=yCONFIG_MTD_ONENAND_GENERIC=mCONFIG_MTD_ONENAND_SAMSUNG=mCONFIG_MTD_ONENAND_OTP=yCONFIG_MTD_ONENAND_2X_PROGRAM=y
# CONFIG_MTD_RAW_NAND is not set
#
# ECC engine support
#CONFIG_MTD_NAND_ECC=y
# CONFIG_MTD_NAND_ECC_SW_HAMMING is not setCONFIG_MTD_NAND_ECC_SW_BCH=y
# CONFIG_MTD_NAND_ECC_MXIC is not setCONFIG_MTD_NAND_ECC_MEDIATEK=m
# end of ECC engine support # end of NAND
#
# LPDDR & LPDDR2 PCM memory drivers
#CONFIG_MTD_LPDDR=mCONFIG_MTD_QINFO_PROBE=m
# end of LPDDR & LPDDR2 PCM memory drivers
CONFIG_MTD_UBI=m CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 CONFIG_MTD_UBI_FASTMAP=y CONFIG_MTD_UBI_GLUEBI=m CONFIG_MTD_UBI_BLOCK=yCONFIG_MTD_HYPERBUS=y
# CONFIG_HBMC_AM654 is not setCONFIG_DTC=yCONFIG_OF=y
# CONFIG_OF_UNITTEST is not set CONFIG_OF_ALL_DTBS=yCONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=yCONFIG_OF_KOBJ=yCONFIG_OF_DYNAMIC=yCONFIG_OF_ADDRESS=yCONFIG_OF_IRQ=yCONFIG_OF_RESERVED_MEM=yCONFIG_OF_RESOLVE=yCONFIG_OF_OVERLAY=yCONFIG_OF_NUMA=yCONFIG_PARPORT=y
# CONFIG_PARPORT_PC is not set CONFIG_PARPORT_AX88796=m CONFIG_PARPORT_1284=y CONFIG_PARPORT_NOT_PC=yCONFIG_BLK_DEV=yCONFIG_BLK_DEV_NULL_BLK=y
# CONFIG_BLK_DEV_NULL_BLK_FAULT_INJECTION is not set CONFIG_BLK_DEV_PCIESSD_MTIP32XX=y CONFIG_ZRAM=m
# CONFIG_ZRAM_DEF_COMP_ZSTD is not set CONFIG_ZRAM_DEF_COMP_LZ4=y
# CONFIG_ZRAM_DEF_COMP_842 is not set CONFIG_ZRAM_DEF_COMP="lz4"
# CONFIG_ZRAM_WRITEBACK is not set CONFIG_ZRAM_MEMORY_TRACKING=y CONFIG_BLK_DEV_LOOP=m CONFIG_BLK_DEV_LOOP_MIN_COUNT=8
#
# DRBD disabled because PROC_FS or INET not selected #CONFIG_BLK_DEV_RAM=m CONFIG_BLK_DEV_RAM_COUNT=16 CONFIG_BLK_DEV_RAM_SIZE=4096 CONFIG_XEN_BLKDEV_FRONTEND=m CONFIG_VIRTIO_BLK=mCONFIG_BLK_DEV_UBLK=y
#
# NVME Support
#CONFIG_NVME_COMMON=yCONFIG_NVME_CORE=y
# CONFIG_BLK_DEV_NVME is not set
# CONFIG_NVME_MULTIPATH is not set
# CONFIG_NVME_VERBOSE_ERRORS is not set
# CONFIG_NVME_HWMON is not setCONFIG_NVME_FABRICS=yCONFIG_NVME_FC=yCONFIG_NVME_AUTH=y
# CONFIG_NVME_TARGET is not set
# end of NVME Support
#
# Misc devices
#
# CONFIG_AD525X_DPOT is not set
# CONFIG_DUMMY_IRQ is not setCONFIG_PHANTOM=mCONFIG_TIFM_CORE=mCONFIG_TIFM_7XX1=mCONFIG_ICS932S401=yCONFIG_ATMEL_SSC=m
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HI6421V600_IRQ is not setCONFIG_HP_ILO=m
# CONFIG_QCOM_COINCELL is not setCONFIG_QCOM_FASTRPC=mCONFIG_APDS9802ALS=mCONFIG_ISL29003=mCONFIG_ISL29020=yCONFIG_SENSORS_TSL2550=mCONFIG_SENSORS_BH1770=yCONFIG_SENSORS_APDS990X=y
# CONFIG_HMC6352 is not setCONFIG_DS1682=mCONFIG_PCH_PHUB=yCONFIG_SRAM=yCONFIG_DW_XDATA_PCIE=mCONFIG_PCI_ENDPOINT_TEST=mCONFIG_XILINX_SDFEC=yCONFIG_MISC_RTSX=yCONFIG_OPEN_DICE=m
# CONFIG_VCPU_STALL_DETECTOR is not set
# CONFIG_C2PORT is not set
#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not setCONFIG_EEPROM_LEGACY=mCONFIG_EEPROM_MAX6875=yCONFIG_EEPROM_93CX6=y
# CONFIG_EEPROM_IDT_89HPESX is not set
# CONFIG_EEPROM_EE1004 is not set
# end of EEPROM support
# CONFIG_CB710_CORE is not set
#
# Texas Instruments shared transport line discipline #
# end of Texas Instruments shared transport line discipline
# CONFIG_SENSORS_LIS3_I2C is not set
# CONFIG_ALTERA_STAPL is not setCONFIG_GENWQE=mCONFIG_GENWQE_PLATFORM_ERROR_RECOVERY=0CONFIG_ECHO=mCONFIG_BCM_VK=yCONFIG_BCM_VK_TTY=yCONFIG_MISC_ALCOR_PCI=yCONFIG_MISC_RTSX_PCI=yCONFIG_HABANA_AI=yCONFIG_UACCE=yCONFIG_PVPANIC=yCONFIG_PVPANIC_MMIO=yCONFIG_PVPANIC_PCI=m
# end of Misc devices
#
# SCSI device support
#CONFIG_SCSI_MOD=yCONFIG_RAID_ATTRS=yCONFIG_SCSI_COMMON=m
# CONFIG_SCSI is not set
# end of SCSI device support
CONFIG_HAVE_PATA_PLATFORM=y
# CONFIG_ATA is not set
# CONFIG_MD is not setCONFIG_TARGET_CORE=m
# CONFIG_TCM_IBLOCK is not setCONFIG_TCM_FILEIO=mCONFIG_FUSION=yCONFIG_FUSION_MAX_SGE=128CONFIG_FUSION_LOGGING=y
#
# IEEE 1394 (FireWire) support
#
# CONFIG_FIREWIRE is not set
# CONFIG_FIREWIRE_NOSY is not set
# end of IEEE 1394 (FireWire) support
#
# Input device support
#CONFIG_INPUT=y
# CONFIG_INPUT_LEDS is not setCONFIG_INPUT_FF_MEMLESS=yCONFIG_INPUT_SPARSEKMAP=mCONFIG_INPUT_MATRIXKMAP=yCONFIG_INPUT_VIVALDIFMAP=y
#
# Userland interfaces
#CONFIG_INPUT_MOUSEDEV=y
# CONFIG_INPUT_MOUSEDEV_PSAUX is not setCONFIG_INPUT_MOUSEDEV_SCREEN_X=1024CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768CONFIG_INPUT_JOYDEV=mCONFIG_INPUT_EVDEV=m
# CONFIG_INPUT_EVBUG is not set
#
# Input Device Drivers
#CONFIG_INPUT_KEYBOARD=yCONFIG_KEYBOARD_ADC=mCONFIG_KEYBOARD_ADP5588=yCONFIG_KEYBOARD_ADP5589=mCONFIG_KEYBOARD_ATKBD=yCONFIG_KEYBOARD_QT1050=mCONFIG_KEYBOARD_QT1070=m
# CONFIG_KEYBOARD_QT2160 is not setCONFIG_KEYBOARD_CLPS711X=yCONFIG_KEYBOARD_DLINK_DIR685=yCONFIG_KEYBOARD_LKKBD=y
# CONFIG_KEYBOARD_EP93XX is not setCONFIG_KEYBOARD_GPIO=mCONFIG_KEYBOARD_GPIO_POLLED=mCONFIG_KEYBOARD_TCA6416=y
# CONFIG_KEYBOARD_TCA8418 is not setCONFIG_KEYBOARD_MATRIX=yCONFIG_KEYBOARD_LM8323=yCONFIG_KEYBOARD_LM8333=yCONFIG_KEYBOARD_MAX7359=m
# CONFIG_KEYBOARD_MCS is not set
# CONFIG_KEYBOARD_MPR121 is not set
# CONFIG_KEYBOARD_SNVS_PWRKEY is not setCONFIG_KEYBOARD_IMX=yCONFIG_KEYBOARD_NEWTON=y
# CONFIG_KEYBOARD_TEGRA is not setCONFIG_KEYBOARD_OPENCORES=y
# CONFIG_KEYBOARD_PMIC8XXX is not setCONFIG_KEYBOARD_SAMSUNG=y
# CONFIG_KEYBOARD_GOLDFISH_EVENTS is not set
# CONFIG_KEYBOARD_STOWAWAY is not setCONFIG_KEYBOARD_ST_KEYSCAN=m
# CONFIG_KEYBOARD_SUNKBD is not setCONFIG_KEYBOARD_SH_KEYSC=mCONFIG_KEYBOARD_SUN4I_LRADC=yCONFIG_KEYBOARD_IQS62X=m
# CONFIG_KEYBOARD_OMAP4 is not set
# CONFIG_KEYBOARD_TC3589X is not setCONFIG_KEYBOARD_TM2_TOUCHKEY=m
# CONFIG_KEYBOARD_TWL4030 is not setCONFIG_KEYBOARD_XTKBD=y
# CONFIG_KEYBOARD_CROS_EC is not setCONFIG_KEYBOARD_CAP11XX=m
# CONFIG_KEYBOARD_BCM is not set
# CONFIG_KEYBOARD_MT6779 is not setCONFIG_KEYBOARD_MTK_PMIC=y
# CONFIG_KEYBOARD_CYPRESS_SF is not setCONFIG_INPUT_MOUSE=y
# CONFIG_MOUSE_PS2 is not set
# CONFIG_MOUSE_SERIAL is not set
# CONFIG_MOUSE_CYAPA is not set
# CONFIG_MOUSE_ELAN_I2C is not setCONFIG_MOUSE_VSXXXAA=mCONFIG_MOUSE_GPIO=y
# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_INPUT_JOYSTICK is not setCONFIG_INPUT_TABLET=y
# CONFIG_TABLET_SERIAL_WACOM4 is not setCONFIG_INPUT_TOUCHSCREEN=yCONFIG_TOUCHSCREEN_AD7879=yCONFIG_TOUCHSCREEN_AD7879_I2C=y
# CONFIG_TOUCHSCREEN_ADC is not setCONFIG_TOUCHSCREEN_AR1021_I2C=y
# CONFIG_TOUCHSCREEN_ATMEL_MXT is not setCONFIG_TOUCHSCREEN_AUO_PIXCIR=yCONFIG_TOUCHSCREEN_BU21013=yCONFIG_TOUCHSCREEN_BU21029=yCONFIG_TOUCHSCREEN_CHIPONE_ICN8318=mCONFIG_TOUCHSCREEN_CY8CTMA140=mCONFIG_TOUCHSCREEN_CY8CTMG110=m
# CONFIG_TOUCHSCREEN_CYTTSP_CORE is not setCONFIG_TOUCHSCREEN_CYTTSP4_CORE=yCONFIG_TOUCHSCREEN_CYTTSP4_I2C=yCONFIG_TOUCHSCREEN_DA9052=yCONFIG_TOUCHSCREEN_DYNAPRO=y
# CONFIG_TOUCHSCREEN_HAMPSHIRE is not set
# CONFIG_TOUCHSCREEN_EETI is not setCONFIG_TOUCHSCREEN_EGALAX=yCONFIG_TOUCHSCREEN_EGALAX_SERIAL=yCONFIG_TOUCHSCREEN_EXC3000=mCONFIG_TOUCHSCREEN_FUJITSU=y
# CONFIG_TOUCHSCREEN_GOODIX is not set
# CONFIG_TOUCHSCREEN_HIDEEP is not setCONFIG_TOUCHSCREEN_HYCON_HY46XX=m
# CONFIG_TOUCHSCREEN_ILI210X is not setCONFIG_TOUCHSCREEN_ILITEK=mCONFIG_TOUCHSCREEN_IPROC=y
# CONFIG_TOUCHSCREEN_S6SY761 is not set
# CONFIG_TOUCHSCREEN_GUNZE is not setCONFIG_TOUCHSCREEN_EKTF2127=y
# CONFIG_TOUCHSCREEN_ELAN is not setCONFIG_TOUCHSCREEN_ELO=m
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
# CONFIG_TOUCHSCREEN_WACOM_I2C is not set
# CONFIG_TOUCHSCREEN_MAX11801 is not setCONFIG_TOUCHSCREEN_MCS5000=m
# CONFIG_TOUCHSCREEN_MMS114 is not setCONFIG_TOUCHSCREEN_MELFAS_MIP4=mCONFIG_TOUCHSCREEN_MSG2638=m
# CONFIG_TOUCHSCREEN_MTOUCH is not setCONFIG_TOUCHSCREEN_IMAGIS=mCONFIG_TOUCHSCREEN_IMX6UL_TSC=yCONFIG_TOUCHSCREEN_INEXIO=mCONFIG_TOUCHSCREEN_MK712=m
# CONFIG_TOUCHSCREEN_PENMOUNT is not setCONFIG_TOUCHSCREEN_EDT_FT5X06=mCONFIG_TOUCHSCREEN_RASPBERRYPI_FW=yCONFIG_TOUCHSCREEN_MIGOR=mCONFIG_TOUCHSCREEN_TOUCHRIGHT=m
# CONFIG_TOUCHSCREEN_TOUCHWIN is not setCONFIG_TOUCHSCREEN_TI_AM335X_TSC=m
# CONFIG_TOUCHSCREEN_UCB1400 is not set
# CONFIG_TOUCHSCREEN_PIXCIR is not set
# CONFIG_TOUCHSCREEN_WDT87XX_I2C is not setCONFIG_TOUCHSCREEN_WM97XX=mCONFIG_TOUCHSCREEN_WM9705=y
# CONFIG_TOUCHSCREEN_WM9712 is not setCONFIG_TOUCHSCREEN_WM9713=yCONFIG_TOUCHSCREEN_MX25=mCONFIG_TOUCHSCREEN_MC13783=mCONFIG_TOUCHSCREEN_TOUCHIT213=mCONFIG_TOUCHSCREEN_TS4800=mCONFIG_TOUCHSCREEN_TSC_SERIO=yCONFIG_TOUCHSCREEN_TSC200X_CORE=mCONFIG_TOUCHSCREEN_TSC2004=mCONFIG_TOUCHSCREEN_TSC2007=y
# CONFIG_TOUCHSCREEN_RM_TS is not setCONFIG_TOUCHSCREEN_SILEAD=yCONFIG_TOUCHSCREEN_SIS_I2C=mCONFIG_TOUCHSCREEN_ST1232=yCONFIG_TOUCHSCREEN_STMFTS=y
# CONFIG_TOUCHSCREEN_SUN4I is not setCONFIG_TOUCHSCREEN_SX8654=y
# CONFIG_TOUCHSCREEN_TPS6507X is not setCONFIG_TOUCHSCREEN_ZET6223=mCONFIG_TOUCHSCREEN_ZFORCE=y
# CONFIG_TOUCHSCREEN_COLIBRI_VF50 is not set
# CONFIG_TOUCHSCREEN_ROHM_BU21023 is not setCONFIG_TOUCHSCREEN_IQS5XX=yCONFIG_TOUCHSCREEN_ZINITIX=y
# CONFIG_INPUT_MISC is not setCONFIG_RMI4_CORE=yCONFIG_RMI4_I2C=y
# CONFIG_RMI4_SMB is not setCONFIG_RMI4_F03=yCONFIG_RMI4_F03_SERIO=yCONFIG_RMI4_2D_SENSOR=yCONFIG_RMI4_F11=yCONFIG_RMI4_F12=yCONFIG_RMI4_F30=yCONFIG_RMI4_F34=yCONFIG_RMI4_F3A=y
# CONFIG_RMI4_F55 is not set
#
# Hardware I/O ports
#CONFIG_SERIO=yCONFIG_SERIO_SERPORT=m
# CONFIG_SERIO_PARKBD is not setCONFIG_SERIO_AMBAKMI=y
# CONFIG_SERIO_PCIPS2 is not setCONFIG_SERIO_LIBPS2=yCONFIG_SERIO_RAW=mCONFIG_SERIO_ALTERA_PS2=mCONFIG_SERIO_PS2MULT=mCONFIG_SERIO_ARC_PS2=yCONFIG_SERIO_APBPS2=m
# CONFIG_SERIO_OLPC_APSP is not setCONFIG_SERIO_SUN4I_PS2=yCONFIG_SERIO_GPIO_PS2=yCONFIG_USERIO=mCONFIG_GAMEPORT=yCONFIG_GAMEPORT_NS558=yCONFIG_GAMEPORT_L4=yCONFIG_GAMEPORT_EMU10K1=mCONFIG_GAMEPORT_FM801=m
# end of Hardware I/O ports # end of Input device support
#
# Character devices
#CONFIG_TTY=yCONFIG_VT=yCONFIG_CONSOLE_TRANSLATIONS=yCONFIG_VT_CONSOLE=yCONFIG_VT_CONSOLE_SLEEP=yCONFIG_HW_CONSOLE=yCONFIG_VT_HW_CONSOLE_BINDING=yCONFIG_UNIX98_PTYS=y
# CONFIG_LEGACY_PTYS is not setCONFIG_LDISC_AUTOLOAD=y
#
# Serial drivers
#CONFIG_SERIAL_EARLYCON=y CONFIG_SERIAL_8250=y
# CONFIG_SERIAL_8250_DEPRECATED_OPTIONS is not set CONFIG_SERIAL_8250_16550A_VARIANTS=y CONFIG_SERIAL_8250_FINTEK=y CONFIG_SERIAL_8250_CONSOLE=y CONFIG_SERIAL_8250_DMA=y CONFIG_SERIAL_8250_PCI=y CONFIG_SERIAL_8250_EXAR=m CONFIG_SERIAL_8250_CS=y CONFIG_SERIAL_8250_MEN_MCB=y CONFIG_SERIAL_8250_NR_UARTS=4 CONFIG_SERIAL_8250_RUNTIME_UARTS=4 CONFIG_SERIAL_8250_EXTENDED=y CONFIG_SERIAL_8250_MANY_PORTS=y CONFIG_SERIAL_8250_ASPEED_VUART=y CONFIG_SERIAL_8250_SHARE_IRQ=y
# CONFIG_SERIAL_8250_DETECT_IRQ is not set # CONFIG_SERIAL_8250_RSA is not set CONFIG_SERIAL_8250_DWLIB=y CONFIG_SERIAL_8250_BCM2835AUX=y CONFIG_SERIAL_8250_FSL=y CONFIG_SERIAL_8250_DW=y CONFIG_SERIAL_8250_EM=m CONFIG_SERIAL_8250_IOC3=m
# CONFIG_SERIAL_8250_RT288X is not set
# CONFIG_SERIAL_8250_OMAP is not set CONFIG_SERIAL_8250_LPC18XX=y
# CONFIG_SERIAL_8250_MT6577 is not set CONFIG_SERIAL_8250_UNIPHIER=m CONFIG_SERIAL_8250_INGENIC=y CONFIG_SERIAL_8250_LPSS=y CONFIG_SERIAL_8250_MID=y
# CONFIG_SERIAL_8250_PERICOM is not set CONFIG_SERIAL_8250_PXA=m CONFIG_SERIAL_8250_TEGRA=m
# CONFIG_SERIAL_8250_BCM7271 is not set CONFIG_SERIAL_OF_PLATFORM=m
#
# Non-8250 serial port support
#CONFIG_SERIAL_AMBA_PL010=yCONFIG_SERIAL_AMBA_PL010_CONSOLE=yCONFIG_SERIAL_AMBA_PL011=m
# CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not setCONFIG_SERIAL_ATMEL=y
# CONFIG_SERIAL_ATMEL_CONSOLE is not set
# CONFIG_SERIAL_ATMEL_PDC is not set
# CONFIG_SERIAL_ATMEL_TTYAT is not setCONFIG_SERIAL_MESON=mCONFIG_SERIAL_MESON_CONSOLE=yCONFIG_SERIAL_CLPS711X=mCONFIG_SERIAL_SAMSUNG=yCONFIG_SERIAL_SAMSUNG_UARTS_4=yCONFIG_SERIAL_SAMSUNG_UARTS=4CONFIG_SERIAL_SAMSUNG_CONSOLE=y
# CONFIG_SERIAL_TEGRA is not set
# CONFIG_SERIAL_IMX is not set
# CONFIG_SERIAL_IMX_EARLYCON is not set
# CONFIG_SERIAL_UARTLITE is not set
# CONFIG_SERIAL_SH_SCI is not setCONFIG_SERIAL_HS_LPC32XX=y
# CONFIG_SERIAL_HS_LPC32XX_CONSOLE is not setCONFIG_SERIAL_CORE=yCONFIG_SERIAL_CORE_CONSOLE=yCONFIG_SERIAL_ICOM=yCONFIG_SERIAL_JSM=yCONFIG_SERIAL_MSM=yCONFIG_SERIAL_MSM_CONSOLE=y
# CONFIG_SERIAL_QCOM_GENI is not set
# CONFIG_SERIAL_VT8500 is not setCONFIG_SERIAL_OMAP=y
# CONFIG_SERIAL_OMAP_CONSOLE is not set
# CONFIG_SERIAL_SIFIVE is not setCONFIG_SERIAL_LANTIQ=yCONFIG_SERIAL_LANTIQ_CONSOLE=yCONFIG_SERIAL_SCCNXP=y
# CONFIG_SERIAL_SCCNXP_CONSOLE is not set
# CONFIG_SERIAL_SC16IS7XX is not setCONFIG_SERIAL_TIMBERDALE=mCONFIG_SERIAL_BCM63XX=y
# CONFIG_SERIAL_BCM63XX_CONSOLE is not setCONFIG_SERIAL_ALTERA_JTAGUART=yCONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=yCONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS=yCONFIG_SERIAL_ALTERA_UART=yCONFIG_SERIAL_ALTERA_UART_MAXPORTS=4CONFIG_SERIAL_ALTERA_UART_BAUDRATE=115200CONFIG_SERIAL_ALTERA_UART_CONSOLE=y
# CONFIG_SERIAL_PCH_UART is not setCONFIG_SERIAL_MXS_AUART=mCONFIG_SERIAL_XILINX_PS_UART=yCONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
# CONFIG_SERIAL_MPS2_UART_CONSOLE is not setCONFIG_SERIAL_MPS2_UART=y
# CONFIG_SERIAL_ARC is not set
# CONFIG_SERIAL_RP2 is not setCONFIG_SERIAL_FSL_LPUART=m
# CONFIG_SERIAL_FSL_LINFLEXUART is not setCONFIG_SERIAL_CONEXANT_DIGICOLOR=mCONFIG_SERIAL_ST_ASC=mCONFIG_SERIAL_MEN_Z135=mCONFIG_SERIAL_SPRD=mCONFIG_SERIAL_STM32=m
# CONFIG_SERIAL_MVEBU_UART is not set
# CONFIG_SERIAL_OWL is not set
# CONFIG_SERIAL_RDA is not setCONFIG_SERIAL_MILBEAUT_USIO=mCONFIG_SERIAL_MILBEAUT_USIO_PORTS=4CONFIG_SERIAL_LITEUART=mCONFIG_SERIAL_LITEUART_MAX_PORTS=1
# CONFIG_SERIAL_SUNPLUS is not set
# end of Serial drivers
CONFIG_SERIAL_MCTRL_GPIO=yCONFIG_SERIAL_NONSTANDARD=yCONFIG_MOXA_INTELLIO=m
# CONFIG_MOXA_SMARTIO is not setCONFIG_SYNCLINK_GT=yCONFIG_N_HDLC=y
# CONFIG_GOLDFISH_TTY is not setCONFIG_NOZOMI=y
# CONFIG_NULL_TTY is not setCONFIG_HVC_DRIVER=y
# CONFIG_HVC_XEN is not setCONFIG_HVC_DCC=yCONFIG_HVC_DCC_SERIALIZE_SMP=yCONFIG_RPMSG_TTY=y
# CONFIG_SERIAL_DEV_BUS is not setCONFIG_PRINTER=mCONFIG_LP_CONSOLE=yCONFIG_PPDEV=y
# CONFIG_VIRTIO_CONSOLE is not setCONFIG_IPMI_HANDLER=yCONFIG_IPMI_PLAT_DATA=y
# CONFIG_IPMI_PANIC_EVENT is not setCONFIG_IPMI_DEVICE_INTERFACE=mCONFIG_IPMI_SI=yCONFIG_IPMI_SSIF=y
# CONFIG_IPMI_IPMB is not setCONFIG_IPMI_WATCHDOG=yCONFIG_IPMI_POWEROFF=mCONFIG_IPMI_KCS_BMC=m
# CONFIG_ASPEED_KCS_IPMI_BMC is not setCONFIG_NPCM7XX_KCS_IPMI_BMC=m
# CONFIG_IPMI_KCS_BMC_CDEV_IPMI is not setCONFIG_IPMI_KCS_BMC_SERIO=m
# CONFIG_ASPEED_BT_IPMI_BMC is not set
# CONFIG_IPMB_DEVICE_INTERFACE is not setCONFIG_HW_RANDOM=yCONFIG_HW_RANDOM_TIMERIOMEM=yCONFIG_HW_RANDOM_ATMEL=yCONFIG_HW_RANDOM_BA431=mCONFIG_HW_RANDOM_BCM2835=yCONFIG_HW_RANDOM_IPROC_RNG200=yCONFIG_HW_RANDOM_IXP4XX=yCONFIG_HW_RANDOM_OMAP=yCONFIG_HW_RANDOM_OMAP3_ROM=m
# CONFIG_HW_RANDOM_VIRTIO is not setCONFIG_HW_RANDOM_IMX_RNGC=mCONFIG_HW_RANDOM_NOMADIK=y
# CONFIG_HW_RANDOM_HISI is not setCONFIG_HW_RANDOM_STM32=mCONFIG_HW_RANDOM_MESON=m
# CONFIG_HW_RANDOM_MTK is not setCONFIG_HW_RANDOM_EXYNOS=y
# CONFIG_HW_RANDOM_NPCM is not set
# CONFIG_HW_RANDOM_KEYSTONE is not set
# CONFIG_HW_RANDOM_CCTRNG is not setCONFIG_HW_RANDOM_XIPHERA=yCONFIG_HW_RANDOM_ARM_SMCCC_TRNG=yCONFIG_HW_RANDOM_CN10K=mCONFIG_APPLICOM=m
#
# PCMCIA character devices
#
# CONFIG_SYNCLINK_CS is not setCONFIG_CARDMAN_4000=m
# CONFIG_CARDMAN_4040 is not setCONFIG_SCR24X=y
# end of PCMCIA character devices
# CONFIG_DEVMEM is not setCONFIG_DEVPORT=yCONFIG_TCG_TPM=mCONFIG_HW_RANDOM_TPM=yCONFIG_TCG_TIS_CORE=mCONFIG_TCG_TIS=mCONFIG_TCG_TIS_I2C=m
# CONFIG_TCG_TIS_SYNQUACER is not setCONFIG_TCG_TIS_I2C_CR50=m
# CONFIG_TCG_TIS_I2C_ATMEL is not set
# CONFIG_TCG_TIS_I2C_INFINEON is not setCONFIG_TCG_TIS_I2C_NUVOTON=mCONFIG_TCG_ATMEL=mCONFIG_TCG_XEN=mCONFIG_TCG_VTPM_PROXY=mCONFIG_TCG_TIS_ST33ZP24=mCONFIG_TCG_TIS_ST33ZP24_I2C=mCONFIG_XILLYBUS_CLASS=mCONFIG_XILLYBUS=mCONFIG_XILLYBUS_PCIE=mCONFIG_XILLYBUS_OF=mCONFIG_RANDOM_TRUST_CPU=y
# CONFIG_RANDOM_TRUST_BOOTLOADER is not set
# end of Character devices
#
# I2C support
#CONFIG_I2C=yCONFIG_I2C_BOARDINFO=y
# CONFIG_I2C_COMPAT is not setCONFIG_I2C_CHARDEV=mCONFIG_I2C_MUX=m
#
# Multiplexer I2C Chip support
#
# CONFIG_I2C_ARB_GPIO_CHALLENGE is not setCONFIG_I2C_MUX_GPIO=m
# CONFIG_I2C_MUX_GPMUX is not setCONFIG_I2C_MUX_LTC4306=mCONFIG_I2C_MUX_PCA9541=m
CONFIG_I2C_MUX_PCA954x=mCONFIG_I2C_MUX_PINCTRL=mCONFIG_I2C_MUX_REG=mCONFIG_I2C_DEMUX_PINCTRL=mCONFIG_I2C_MUX_MLXCPLD=m
# end of Multiplexer I2C Chip support
CONFIG_I2C_HELPER_AUTO=yCONFIG_I2C_SMBUS=yCONFIG_I2C_ALGOBIT=yCONFIG_I2C_ALGOPCA=m
#
# I2C Hardware Bus support
#
#
# PC SMBus host controller drivers
#CONFIG_I2C_ALI1535=m
# CONFIG_I2C_ALI1563 is not setCONFIG_I2C_ALI15X3=mCONFIG_I2C_AMD756=mCONFIG_I2C_AMD8111=mCONFIG_I2C_HIX5HD2=yCONFIG_I2C_I801=yCONFIG_I2C_ISCH=y
# CONFIG_I2C_PIIX4 is not setCONFIG_I2C_NFORCE2=m
# CONFIG_I2C_NVIDIA_GPU is not set
# CONFIG_I2C_SIS5595 is not set
# CONFIG_I2C_SIS630 is not set
# CONFIG_I2C_SIS96X is not setCONFIG_I2C_VIA=mCONFIG_I2C_VIAPRO=m
#
# I2C system bus drivers (mostly embedded / system-on-chip) #CONFIG_I2C_ALTERA=yCONFIG_I2C_ASPEED=m
# CONFIG_I2C_AT91 is not setCONFIG_I2C_AXXIA=yCONFIG_I2C_BCM2835=mCONFIG_I2C_BCM_IPROC=yCONFIG_I2C_BCM_KONA=mCONFIG_I2C_BRCMSTB=m
# CONFIG_I2C_CADENCE is not set CONFIG_I2C_CBUS_GPIO=y
# CONFIG_I2C_DAVINCI is not set CONFIG_I2C_DESIGNWARE_CORE=m
# CONFIG_I2C_DESIGNWARE_SLAVE is not set CONFIG_I2C_DESIGNWARE_PLATFORM=m
# CONFIG_I2C_DESIGNWARE_PCI is not set CONFIG_I2C_DIGICOLOR=yCONFIG_I2C_EG20T=mCONFIG_I2C_EMEV2=yCONFIG_I2C_EXYNOS5=mCONFIG_I2C_GPIO=mCONFIG_I2C_GPIO_FAULT_INJECTOR=y CONFIG_I2C_HIGHLANDER=m
# CONFIG_I2C_HISI is not set
# CONFIG_I2C_IMG is not setCONFIG_I2C_IMX=yCONFIG_I2C_IMX_LPI2C=yCONFIG_I2C_IOP3XX=y
# CONFIG_I2C_JZ4780 is not set
# CONFIG_I2C_KEMPLD is not setCONFIG_I2C_LPC2K=y
# CONFIG_I2C_MESON is not set CONFIG_I2C_MICROCHIP_CORE=yCONFIG_I2C_MT65XX=mCONFIG_I2C_MT7621=yCONFIG_I2C_MV64XXX=mCONFIG_I2C_MXS=yCONFIG_I2C_NOMADIK=mCONFIG_I2C_NPCM=yCONFIG_I2C_OCORES=m
# CONFIG_I2C_OMAP is not setCONFIG_I2C_OWL=yCONFIG_I2C_APPLE=yCONFIG_I2C_PCA_PLATFORM=m
# CONFIG_I2C_PNX is not setCONFIG_I2C_PXA=y
# CONFIG_I2C_PXA_SLAVE is not set
# CONFIG_I2C_QCOM_CCI is not set CONFIG_I2C_QCOM_GENI=mCONFIG_I2C_QUP=mCONFIG_I2C_RIIC=mCONFIG_I2C_RK3X=yCONFIG_I2C_RZV2M=mCONFIG_I2C_S3C2410=yCONFIG_I2C_SH_MOBILE=mCONFIG_I2C_SIMTEC=mCONFIG_I2C_SPRD=mCONFIG_I2C_ST=mCONFIG_I2C_STM32F4=yCONFIG_I2C_STM32F7=m
# CONFIG_I2C_SUN6I_P2WI is not set CONFIG_I2C_SYNQUACER=mCONFIG_I2C_TEGRA=mCONFIG_I2C_TEGRA_BPMP=mCONFIG_I2C_UNIPHIER=yCONFIG_I2C_UNIPHIER_F=yCONFIG_I2C_VERSATILE=m
# CONFIG_I2C_WMT is not setCONFIG_I2C_THUNDERX=m
# CONFIG_I2C_XILINX is not set
# CONFIG_I2C_XLP9XX is not setCONFIG_I2C_RCAR=m
#
# External I2C/SMBus adapter drivers
#CONFIG_I2C_PARPORT=mCONFIG_I2C_TAOS_EVM=m
#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_MLXCPLD is not set
# CONFIG_I2C_CROS_EC_TUNNEL is not setCONFIG_I2C_FSI=m
# CONFIG_I2C_VIRTIO is not set
# end of I2C Hardware Bus support
CONFIG_I2C_STUB=mCONFIG_I2C_SLAVE=yCONFIG_I2C_SLAVE_EEPROM=y
# CONFIG_I2C_SLAVE_TESTUNIT is not set
# CONFIG_I2C_DEBUG_CORE is not setCONFIG_I2C_DEBUG_ALGO=yCONFIG_I2C_DEBUG_BUS=y
# end of I2C support
CONFIG_I3C=mCONFIG_CDNS_I3C_MASTER=m
# CONFIG_DW_I3C_MASTER is not setCONFIG_SVC_I3C_MASTER=mCONFIG_MIPI_I3C_HCI=m
# CONFIG_SPI is not setCONFIG_SPMI=mCONFIG_SPMI_HISI3670=mCONFIG_SPMI_MSM_PMIC_ARB=mCONFIG_SPMI_MTK_PMIF=m
# CONFIG_HSI is not setCONFIG_PPS=mCONFIG_PPS_DEBUG=y
#
# PPS clients support
#CONFIG_PPS_CLIENT_KTIMER=m
# CONFIG_PPS_CLIENT_LDISC is not set
# CONFIG_PPS_CLIENT_PARPORT is not setCONFIG_PPS_CLIENT_GPIO=m
#
# PPS generators support
#
#
# PTP clock support
#CONFIG_PTP_1588_CLOCK_OPTIONAL=y
#
# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. #
# end of PTP clock support
CONFIG_PINCTRL=yCONFIG_GENERIC_PINCTRL_GROUPS=yCONFIG_PINMUX=yCONFIG_GENERIC_PINMUX_FUNCTIONS=yCONFIG_PINCONF=yCONFIG_GENERIC_PINCONF=y
# CONFIG_DEBUG_PINCTRL is not setCONFIG_PINCTRL_AMD=yCONFIG_PINCTRL_APPLE_GPIO=y
# CONFIG_PINCTRL_AS3722 is not setCONFIG_PINCTRL_AT91PIO4=y
# CONFIG_PINCTRL_AXP209 is not setCONFIG_PINCTRL_BM1880=y
# CONFIG_PINCTRL_DA850_PUPD is not set
# CONFIG_PINCTRL_DA9062 is not set
# CONFIG_PINCTRL_EQUILIBRIUM is not setCONFIG_PINCTRL_INGENIC=yCONFIG_PINCTRL_KEEMBAY=yCONFIG_PINCTRL_LPC18XX=yCONFIG_PINCTRL_MCP23S08_I2C=mCONFIG_PINCTRL_MCP23S08=mCONFIG_PINCTRL_MICROCHIP_SGPIO=yCONFIG_PINCTRL_OCELOT=mCONFIG_PINCTRL_PALMAS=yCONFIG_PINCTRL_PISTACHIO=yCONFIG_PINCTRL_RK805=m
# CONFIG_PINCTRL_ROCKCHIP is not setCONFIG_PINCTRL_SINGLE=mCONFIG_PINCTRL_STARFIVE=mCONFIG_PINCTRL_STMFX=yCONFIG_PINCTRL_SX150X=yCONFIG_PINCTRL_THUNDERBAY=mCONFIG_PINCTRL_ZYNQMP=yCONFIG_PINCTRL_OWL=y
# CONFIG_PINCTRL_S500 is not setCONFIG_PINCTRL_S700=y
# CONFIG_PINCTRL_S900 is not setCONFIG_PINCTRL_ASPEED=y
# CONFIG_PINCTRL_ASPEED_G4 is not setCONFIG_PINCTRL_ASPEED_G5=y
# CONFIG_PINCTRL_ASPEED_G6 is not setCONFIG_PINCTRL_BCM281XX=yCONFIG_PINCTRL_BCM2835=yCONFIG_PINCTRL_BCM4908=m
# CONFIG_PINCTRL_BCM6318 is not set
# CONFIG_PINCTRL_BCM6328 is not set
# CONFIG_PINCTRL_BCM6358 is not set
# CONFIG_PINCTRL_BCM6362 is not set
# CONFIG_PINCTRL_BCM6368 is not set
# CONFIG_PINCTRL_BCM63268 is not set
# CONFIG_PINCTRL_IPROC_GPIO is not setCONFIG_PINCTRL_CYGNUS_MUX=y
# CONFIG_PINCTRL_NS is not setCONFIG_PINCTRL_NSP_GPIO=y
# CONFIG_PINCTRL_NS2_MUX is not setCONFIG_PINCTRL_NSP_MUX=y
# CONFIG_PINCTRL_AS370 is not set
# CONFIG_PINCTRL_BERLIN_BG4CT is not setCONFIG_PINCTRL_MADERA=yCONFIG_PINCTRL_CS47L85=yCONFIG_PINCTRL_CS47L92=y
#
# Intel pinctrl drivers
#
# end of Intel pinctrl drivers
#
# MediaTek pinctrl drivers
#CONFIG_EINT_MTK=yCONFIG_PINCTRL_MTK=yCONFIG_PINCTRL_MTK_V2=yCONFIG_PINCTRL_MTK_MOORE=yCONFIG_PINCTRL_MTK_PARIS=yCONFIG_PINCTRL_MT2701=yCONFIG_PINCTRL_MT7623=y
# CONFIG_PINCTRL_MT7629 is not setCONFIG_PINCTRL_MT8135=yCONFIG_PINCTRL_MT8127=y
# CONFIG_PINCTRL_MT2712 is not set
# CONFIG_PINCTRL_MT6765 is not setCONFIG_PINCTRL_MT6779=y
# CONFIG_PINCTRL_MT6795 is not setCONFIG_PINCTRL_MT6797=y
# CONFIG_PINCTRL_MT7622 is not setCONFIG_PINCTRL_MT7986=yCONFIG_PINCTRL_MT8167=yCONFIG_PINCTRL_MT8173=y
# CONFIG_PINCTRL_MT8183 is not set
# CONFIG_PINCTRL_MT8186 is not set
# CONFIG_PINCTRL_MT8192 is not setCONFIG_PINCTRL_MT8195=y
# CONFIG_PINCTRL_MT8365 is not set
# CONFIG_PINCTRL_MT8516 is not setCONFIG_PINCTRL_MT6397=y
# end of MediaTek pinctrl drivers
# CONFIG_PINCTRL_MESON is not setCONFIG_PINCTRL_MVEBU=yCONFIG_PINCTRL_ARMADA_AP806=yCONFIG_PINCTRL_ARMADA_CP110=yCONFIG_PINCTRL_AC5=yCONFIG_PINCTRL_ARMADA_37XX=yCONFIG_PINCTRL_WPCM450=y
# CONFIG_PINCTRL_NPCM7XX is not setCONFIG_PINCTRL_PXA=yCONFIG_PINCTRL_PXA25X=yCONFIG_PINCTRL_PXA27X=mCONFIG_PINCTRL_MSM=mCONFIG_PINCTRL_APQ8064=mCONFIG_PINCTRL_APQ8084=mCONFIG_PINCTRL_IPQ4019=m
# CONFIG_PINCTRL_IPQ8064 is not setCONFIG_PINCTRL_IPQ8074=mCONFIG_PINCTRL_IPQ6018=m
# CONFIG_PINCTRL_MSM8226 is not setCONFIG_PINCTRL_MSM8660=mCONFIG_PINCTRL_MSM8960=m
# CONFIG_PINCTRL_MDM9607 is not setCONFIG_PINCTRL_MDM9615=mCONFIG_PINCTRL_MSM8X74=m
# CONFIG_PINCTRL_MSM8909 is not set
# CONFIG_PINCTRL_MSM8916 is not setCONFIG_PINCTRL_MSM8953=m
# CONFIG_PINCTRL_MSM8976 is not set
# CONFIG_PINCTRL_MSM8994 is not setCONFIG_PINCTRL_MSM8996=mCONFIG_PINCTRL_MSM8998=m
# CONFIG_PINCTRL_QCM2290 is not set
# CONFIG_PINCTRL_QCS404 is not set
# CONFIG_PINCTRL_QCOM_SPMI_PMIC is not set
# CONFIG_PINCTRL_QCOM_SSBI_PMIC is not set
# CONFIG_PINCTRL_SC7180 is not setCONFIG_PINCTRL_SC7280=mCONFIG_PINCTRL_SC7280_LPASS_LPI=mCONFIG_PINCTRL_SC8180X=m
# CONFIG_PINCTRL_SC8280XP is not setCONFIG_PINCTRL_SDM660=mCONFIG_PINCTRL_SDM845=mCONFIG_PINCTRL_SDX55=mCONFIG_PINCTRL_SM6115=m
# CONFIG_PINCTRL_SM6125 is not setCONFIG_PINCTRL_SM6350=mCONFIG_PINCTRL_SM6375=mCONFIG_PINCTRL_SDX65=mCONFIG_PINCTRL_SM8150=mCONFIG_PINCTRL_SM8250=m
# CONFIG_PINCTRL_SM8250_LPASS_LPI is not setCONFIG_PINCTRL_SM8350=mCONFIG_PINCTRL_SM8450=mCONFIG_PINCTRL_LPASS_LPI=m
#
# Renesas pinctrl drivers
#CONFIG_PINCTRL_RENESAS=yCONFIG_PINCTRL_SH_PFC=yCONFIG_PINCTRL_SH_PFC_GPIO=yCONFIG_PINCTRL_SH_FUNC_GPIO=y
# CONFIG_PINCTRL_PFC_EMEV2 is not set
# CONFIG_PINCTRL_PFC_R8A77995 is not setCONFIG_PINCTRL_PFC_R8A7794=y
# CONFIG_PINCTRL_PFC_R8A77990 is not set
# CONFIG_PINCTRL_PFC_R8A7779 is not set
# CONFIG_PINCTRL_PFC_R8A7790 is not setCONFIG_PINCTRL_PFC_R8A77950=y
# CONFIG_PINCTRL_PFC_R8A77951 is not setCONFIG_PINCTRL_PFC_R8A7778=y
# CONFIG_PINCTRL_PFC_R8A7793 is not setCONFIG_PINCTRL_PFC_R8A7791=yCONFIG_PINCTRL_PFC_R8A77965=yCONFIG_PINCTRL_PFC_R8A77960=y
# CONFIG_PINCTRL_PFC_R8A77961 is not setCONFIG_PINCTRL_PFC_R8A779F0=yCONFIG_PINCTRL_PFC_R8A7792=yCONFIG_PINCTRL_PFC_R8A77980=yCONFIG_PINCTRL_PFC_R8A77970=yCONFIG_PINCTRL_PFC_R8A779A0=yCONFIG_PINCTRL_PFC_R8A779G0=y
# CONFIG_PINCTRL_PFC_R8A7740 is not set
# CONFIG_PINCTRL_PFC_R8A73A4 is not set
# CONFIG_PINCTRL_RZA1 is not set
# CONFIG_PINCTRL_RZA2 is not setCONFIG_PINCTRL_RZG2L=y
# CONFIG_PINCTRL_PFC_R8A77470 is not set
# CONFIG_PINCTRL_PFC_R8A7745 is not setCONFIG_PINCTRL_PFC_R8A7742=y
# CONFIG_PINCTRL_PFC_R8A7743 is not setCONFIG_PINCTRL_PFC_R8A7744=y
# CONFIG_PINCTRL_PFC_R8A774C0 is not set
# CONFIG_PINCTRL_PFC_R8A774E1 is not setCONFIG_PINCTRL_PFC_R8A774A1=y
# CONFIG_PINCTRL_PFC_R8A774B1 is not set
# CONFIG_PINCTRL_RZN1 is not setCONFIG_PINCTRL_RZV2M=y
# CONFIG_PINCTRL_PFC_SH7203 is not setCONFIG_PINCTRL_PFC_SH7264=yCONFIG_PINCTRL_PFC_SH7269=y
# CONFIG_PINCTRL_PFC_SH7720 is not set
# CONFIG_PINCTRL_PFC_SH7722 is not setCONFIG_PINCTRL_PFC_SH7734=y
# CONFIG_PINCTRL_PFC_SH7757 is not setCONFIG_PINCTRL_PFC_SH7785=y
# CONFIG_PINCTRL_PFC_SH7786 is not set
# CONFIG_PINCTRL_PFC_SH73A0 is not set
# CONFIG_PINCTRL_PFC_SH7723 is not set
# CONFIG_PINCTRL_PFC_SH7724 is not setCONFIG_PINCTRL_PFC_SHX3=y
# end of Renesas pinctrl drivers
CONFIG_PINCTRL_SAMSUNG=yCONFIG_PINCTRL_EXYNOS=y
# CONFIG_PINCTRL_EXYNOS_ARM is not setCONFIG_PINCTRL_EXYNOS_ARM64=yCONFIG_PINCTRL_S3C24XX=yCONFIG_PINCTRL_S3C64XX=y
# CONFIG_PINCTRL_SPRD_SC9860 is not setCONFIG_PINCTRL_STM32=y
# CONFIG_PINCTRL_STM32F429 is not setCONFIG_PINCTRL_STM32F469=yCONFIG_PINCTRL_STM32F746=y
# CONFIG_PINCTRL_STM32F769 is not setCONFIG_PINCTRL_STM32H743=y
# CONFIG_PINCTRL_STM32MP135 is not set
# CONFIG_PINCTRL_STM32MP157 is not setCONFIG_PINCTRL_SUNXI=y
# CONFIG_PINCTRL_SUN4I_A10 is not setCONFIG_PINCTRL_SUN5I=yCONFIG_PINCTRL_SUN6I_A31=yCONFIG_PINCTRL_SUN6I_A31_R=yCONFIG_PINCTRL_SUN8I_A23=yCONFIG_PINCTRL_SUN8I_A33=yCONFIG_PINCTRL_SUN8I_A83T=y
# CONFIG_PINCTRL_SUN8I_A83T_R is not set
# CONFIG_PINCTRL_SUN8I_A23_R is not set
# CONFIG_PINCTRL_SUN8I_H3 is not set
# CONFIG_PINCTRL_SUN8I_H3_R is not setCONFIG_PINCTRL_SUN8I_V3S=y
# CONFIG_PINCTRL_SUN9I_A80 is not set
# CONFIG_PINCTRL_SUN9I_A80_R is not set
# CONFIG_PINCTRL_SUN20I_D1 is not setCONFIG_PINCTRL_SUN50I_A64=yCONFIG_PINCTRL_SUN50I_A64_R=yCONFIG_PINCTRL_SUN50I_A100=y
# CONFIG_PINCTRL_SUN50I_A100_R is not setCONFIG_PINCTRL_SUN50I_H5=y
# CONFIG_PINCTRL_SUN50I_H6 is not setCONFIG_PINCTRL_SUN50I_H6_R=y
# CONFIG_PINCTRL_SUN50I_H616 is not set
# CONFIG_PINCTRL_SUN50I_H616_R is not setCONFIG_PINCTRL_TEGRA=yCONFIG_PINCTRL_TEGRA124=yCONFIG_PINCTRL_TEGRA210=yCONFIG_PINCTRL_TEGRA_XUSB=yCONFIG_PINCTRL_TI_IODELAY=yCONFIG_PINCTRL_UNIPHIER=yCONFIG_PINCTRL_UNIPHIER_LD4=y
# CONFIG_PINCTRL_UNIPHIER_PRO4 is not set
# CONFIG_PINCTRL_UNIPHIER_SLD8 is not set
# CONFIG_PINCTRL_UNIPHIER_PRO5 is not setCONFIG_PINCTRL_UNIPHIER_PXS2=yCONFIG_PINCTRL_UNIPHIER_LD6B=yCONFIG_PINCTRL_UNIPHIER_LD11=y
# CONFIG_PINCTRL_UNIPHIER_LD20 is not setCONFIG_PINCTRL_UNIPHIER_PXS3=yCONFIG_PINCTRL_UNIPHIER_NX1=y
# CONFIG_PINCTRL_TMPV7700 is not setCONFIG_GPIOLIB=yCONFIG_GPIOLIB_FASTPATH_LIMIT=512CONFIG_OF_GPIO=yCONFIG_GPIOLIB_IRQCHIP=yCONFIG_DEBUG_GPIO=yCONFIG_GPIO_CDEV=y
# CONFIG_GPIO_CDEV_V1 is not setCONFIG_GPIO_GENERIC=yCONFIG_GPIO_REGMAP=mCONFIG_GPIO_MAX730X=m
#
# Memory mapped GPIO drivers
#
# CONFIG_GPIO_74XX_MMIO is not set
# CONFIG_GPIO_ALTERA is not setCONFIG_GPIO_ASPEED=mCONFIG_GPIO_ASPEED_SGPIO=y
# CONFIG_GPIO_ATH79 is not setCONFIG_GPIO_RASPBERRYPI_EXP=y
# CONFIG_GPIO_BCM_KONA is not setCONFIG_GPIO_BCM_XGS_IPROC=mCONFIG_GPIO_BRCMSTB=yCONFIG_GPIO_CADENCE=y
# CONFIG_GPIO_CLPS711X is not set
# CONFIG_GPIO_DWAPB is not setCONFIG_GPIO_EIC_SPRD=y
# CONFIG_GPIO_EM is not setCONFIG_GPIO_EXAR=mCONFIG_GPIO_FTGPIO010=yCONFIG_GPIO_GENERIC_PLATFORM=mCONFIG_GPIO_GRGPIO=yCONFIG_GPIO_HISI=mCONFIG_GPIO_HLWD=yCONFIG_GPIO_IOP=yCONFIG_GPIO_LOGICVC=mCONFIG_GPIO_LPC18XX=mCONFIG_GPIO_LPC32XX=yCONFIG_GPIO_MB86S7X=y
# CONFIG_GPIO_MENZ127 is not setCONFIG_GPIO_MPC8XXX=yCONFIG_GPIO_MT7621=yCONFIG_GPIO_MVEBU=yCONFIG_GPIO_MXC=yCONFIG_GPIO_MXS=yCONFIG_GPIO_PL061=m
# CONFIG_GPIO_PMIC_EIC_SPRD is not setCONFIG_GPIO_PXA=yCONFIG_GPIO_RCAR=mCONFIG_GPIO_RDA=y
# CONFIG_GPIO_ROCKCHIP is not set
# CONFIG_GPIO_SAMA5D2_PIOBU is not setCONFIG_GPIO_SIFIVE=yCONFIG_GPIO_SIOX=mCONFIG_GPIO_SNPS_CREG=y
# CONFIG_GPIO_SPRD is not set
# CONFIG_GPIO_STP_XWAY is not setCONFIG_GPIO_SYSCON=yCONFIG_GPIO_TEGRA=y
# CONFIG_GPIO_TEGRA186 is not setCONFIG_GPIO_TS4800=yCONFIG_GPIO_THUNDERX=m
# CONFIG_GPIO_UNIPHIER is not setCONFIG_GPIO_VISCONTI=m
# CONFIG_GPIO_VX855 is not set
# CONFIG_GPIO_XGENE is not set
# CONFIG_GPIO_XGENE_SB is not setCONFIG_GPIO_XILINX=y
# CONFIG_GPIO_XLP is not setCONFIG_GPIO_ZYNQ=m
# CONFIG_GPIO_ZYNQMP_MODEPIN is not setCONFIG_GPIO_AMD_FCH=m
# CONFIG_GPIO_IDT3243X is not set
# end of Memory mapped GPIO drivers
#
# I2C GPIO expanders
#CONFIG_GPIO_ADP5588=y
# CONFIG_GPIO_ADP5588_IRQ is not setCONFIG_GPIO_ADNP=yCONFIG_GPIO_GW_PLD=yCONFIG_GPIO_MAX7300=m
# CONFIG_GPIO_MAX732X is not set
# CONFIG_GPIO_PCA953X is not setCONFIG_GPIO_PCA9570=yCONFIG_GPIO_PCF857X=m
# CONFIG_GPIO_TPIC2810 is not set
# CONFIG_GPIO_TS4900 is not set
# end of I2C GPIO expanders
#
# MFD GPIO expanders
#CONFIG_GPIO_ARIZONA=mCONFIG_GPIO_BD71815=mCONFIG_GPIO_BD71828=mCONFIG_GPIO_DA9052=m
# CONFIG_GPIO_JANZ_TTL is not set
# CONFIG_GPIO_KEMPLD is not setCONFIG_GPIO_LP873X=mCONFIG_GPIO_LP87565=yCONFIG_GPIO_MADERA=mCONFIG_GPIO_MAX77650=mCONFIG_GPIO_PALMAS=yCONFIG_GPIO_SL28CPLD=m
# CONFIG_GPIO_TC3589X is not set
# CONFIG_GPIO_TIMBERDALE is not set
# CONFIG_GPIO_TPS65912 is not setCONFIG_GPIO_TQMX86=mCONFIG_GPIO_TWL4030=yCONFIG_GPIO_UCB1400=m
# CONFIG_GPIO_WM8994 is not set
# end of MFD GPIO expanders
#
# PCI GPIO expanders
#
# CONFIG_GPIO_AMD8111 is not setCONFIG_GPIO_BT8XX=mCONFIG_GPIO_MLXBF=mCONFIG_GPIO_MLXBF2=y
# CONFIG_GPIO_ML_IOH is not setCONFIG_GPIO_PCH=mCONFIG_GPIO_PCI_IDIO_16=yCONFIG_GPIO_PCIE_IDIO_24=yCONFIG_GPIO_RDC321X=y
# end of PCI GPIO expanders
#
# Virtual GPIO drivers
#CONFIG_GPIO_AGGREGATOR=y
# CONFIG_GPIO_MOCKUP is not setCONFIG_GPIO_VIRTIO=m
# CONFIG_GPIO_SIM is not set
# end of Virtual GPIO drivers
CONFIG_W1=y
#
# 1-wire Bus Masters
#CONFIG_W1_MASTER_MATROX=yCONFIG_W1_MASTER_DS2482=yCONFIG_W1_MASTER_MXC=yCONFIG_W1_MASTER_DS1WM=m
# CONFIG_W1_MASTER_GPIO is not setCONFIG_W1_MASTER_SGI=m
# end of 1-wire Bus Masters
#
# 1-wire Slaves
#CONFIG_W1_SLAVE_THERM=yCONFIG_W1_SLAVE_SMEM=mCONFIG_W1_SLAVE_DS2405=yCONFIG_W1_SLAVE_DS2408=y
# CONFIG_W1_SLAVE_DS2408_READBACK is not setCONFIG_W1_SLAVE_DS2413=m
# CONFIG_W1_SLAVE_DS2406 is not set
# CONFIG_W1_SLAVE_DS2423 is not set
# CONFIG_W1_SLAVE_DS2805 is not setCONFIG_W1_SLAVE_DS2430=yCONFIG_W1_SLAVE_DS2431=mCONFIG_W1_SLAVE_DS2433=yCONFIG_W1_SLAVE_DS2433_CRC=yCONFIG_W1_SLAVE_DS2438=mCONFIG_W1_SLAVE_DS250X=mCONFIG_W1_SLAVE_DS2780=mCONFIG_W1_SLAVE_DS2781=yCONFIG_W1_SLAVE_DS28E04=y
# CONFIG_W1_SLAVE_DS28E17 is not set
# end of 1-wire Slaves
CONFIG_POWER_RESET=yCONFIG_POWER_RESET_AS3722=yCONFIG_POWER_RESET_ATC260X=mCONFIG_POWER_RESET_BRCMKONA=y
# CONFIG_POWER_RESET_BRCMSTB is not set
# CONFIG_POWER_RESET_GEMINI_POWEROFF is not setCONFIG_POWER_RESET_GPIO=y
# CONFIG_POWER_RESET_GPIO_RESTART is not setCONFIG_POWER_RESET_HISI=yCONFIG_POWER_RESET_MSM=yCONFIG_POWER_RESET_QCOM_PON=mCONFIG_POWER_RESET_OCELOT_RESET=yCONFIG_POWER_RESET_PIIX4_POWEROFF=yCONFIG_POWER_RESET_LTC2952=yCONFIG_POWER_RESET_MT6323=y
# CONFIG_POWER_RESET_REGULATOR is not set
# CONFIG_POWER_RESET_RESTART is not set
# CONFIG_POWER_RESET_VEXPRESS is not set
# CONFIG_POWER_RESET_XGENE is not set
# CONFIG_POWER_RESET_KEYSTONE is not set
# CONFIG_POWER_RESET_SYSCON is not set
# CONFIG_POWER_RESET_SYSCON_POWEROFF is not setCONFIG_POWER_RESET_RMOBILE=yCONFIG_REBOOT_MODE=yCONFIG_SYSCON_REBOOT_MODE=yCONFIG_POWER_RESET_SC27XX=mCONFIG_NVMEM_REBOOT_MODE=yCONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not setCONFIG_POWER_SUPPLY_HWMON=yCONFIG_PDA_POWER=yCONFIG_GENERIC_ADC_BATTERY=mCONFIG_IP5XXX_POWER=m
# CONFIG_TEST_POWER is not setCONFIG_CHARGER_ADP5061=yCONFIG_BATTERY_ACT8945A=yCONFIG_BATTERY_CW2015=yCONFIG_BATTERY_DS2760=mCONFIG_BATTERY_DS2780=mCONFIG_BATTERY_DS2781=yCONFIG_BATTERY_DS2782=m
# CONFIG_BATTERY_LEGO_EV3 is not set
# CONFIG_BATTERY_SAMSUNG_SDI is not setCONFIG_BATTERY_INGENIC=m
# CONFIG_BATTERY_SBS is not setCONFIG_CHARGER_SBS=yCONFIG_MANAGER_SBS=mCONFIG_BATTERY_BQ27XXX=yCONFIG_BATTERY_BQ27XXX_I2C=mCONFIG_BATTERY_BQ27XXX_HDQ=yCONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=yCONFIG_BATTERY_DA9052=yCONFIG_CHARGER_DA9150=m
# CONFIG_BATTERY_DA9150 is not setCONFIG_CHARGER_AXP20X=mCONFIG_BATTERY_AXP20X=mCONFIG_AXP20X_POWER=mCONFIG_BATTERY_MAX17040=mCONFIG_BATTERY_MAX17042=mCONFIG_BATTERY_MAX1721X=y
# CONFIG_BATTERY_TWL4030_MADC is not set
# CONFIG_CHARGER_PCF50633 is not setCONFIG_BATTERY_RX51=m
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_TWL4030 is not setCONFIG_CHARGER_LP8727=yCONFIG_CHARGER_GPIO=mCONFIG_CHARGER_MANAGER=m
# CONFIG_CHARGER_LT3651 is not setCONFIG_CHARGER_LTC4162L=mCONFIG_CHARGER_MAX14577=yCONFIG_CHARGER_DETECTOR_MAX14656=y
# CONFIG_CHARGER_MAX77650 is not setCONFIG_CHARGER_MAX77976=yCONFIG_CHARGER_MP2629=mCONFIG_CHARGER_QCOM_SMBB=yCONFIG_CHARGER_BQ2415X=y
# CONFIG_CHARGER_BQ24190 is not set
# CONFIG_CHARGER_BQ24257 is not set
# CONFIG_CHARGER_BQ24735 is not setCONFIG_CHARGER_BQ2515X=mCONFIG_CHARGER_BQ25890=mCONFIG_CHARGER_BQ25980=y
# CONFIG_CHARGER_BQ256XX is not setCONFIG_CHARGER_SMB347=yCONFIG_CHARGER_TPS65217=mCONFIG_BATTERY_GAUGE_LTC2941=mCONFIG_BATTERY_GOLDFISH=yCONFIG_BATTERY_RT5033=yCONFIG_CHARGER_RT9455=y
# CONFIG_CHARGER_CROS_USBPD is not setCONFIG_CHARGER_CROS_PCHG=mCONFIG_CHARGER_SC2731=mCONFIG_FUEL_GAUGE_SC27XX=mCONFIG_CHARGER_UCS1002=m
# CONFIG_CHARGER_BD99954 is not setCONFIG_RN5T618_POWER=m
# CONFIG_BATTERY_UG3105 is not setCONFIG_HWMON=yCONFIG_HWMON_VID=y
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Native drivers
#CONFIG_SENSORS_AD7414=y
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADM1021 is not setCONFIG_SENSORS_ADM1025=mCONFIG_SENSORS_ADM1026=m
# CONFIG_SENSORS_ADM1029 is not setCONFIG_SENSORS_ADM1031=m
# CONFIG_SENSORS_ADM1177 is not setCONFIG_SENSORS_ADM9240=yCONFIG_SENSORS_ADT7X10=mCONFIG_SENSORS_ADT7410=mCONFIG_SENSORS_ADT7411=m
# CONFIG_SENSORS_ADT7462 is not setCONFIG_SENSORS_ADT7470=y
# CONFIG_SENSORS_ADT7475 is not setCONFIG_SENSORS_AHT10=mCONFIG_SENSORS_AS370=yCONFIG_SENSORS_ASC7621=y
# CONFIG_SENSORS_AXI_FAN_CONTROL is not setCONFIG_SENSORS_ARM_SCMI=m
# CONFIG_SENSORS_ASB100 is not setCONFIG_SENSORS_ASPEED=m
# CONFIG_SENSORS_ATXP1 is not setCONFIG_SENSORS_BT1_PVT=yCONFIG_SENSORS_BT1_PVT_ALARMS=yCONFIG_SENSORS_CORSAIR_CPRO=yCONFIG_SENSORS_CORSAIR_PSU=yCONFIG_SENSORS_DS620=y
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_DA9052_ADC is not setCONFIG_SENSORS_I5K_AMB=yCONFIG_SENSORS_SPARX5=mCONFIG_SENSORS_F71805F=mCONFIG_SENSORS_F71882FG=m
# CONFIG_SENSORS_F75375S is not setCONFIG_SENSORS_GSC=m
# CONFIG_SENSORS_MC13783_ADC is not set
# CONFIG_SENSORS_FSCHMD is not set
# CONFIG_SENSORS_FTSTEUTATES is not setCONFIG_SENSORS_GL518SM=y
# CONFIG_SENSORS_GL520SM is not setCONFIG_SENSORS_G760A=mCONFIG_SENSORS_G762=yCONFIG_SENSORS_GPIO_FAN=yCONFIG_SENSORS_HIH6130=yCONFIG_SENSORS_IBMAEM=yCONFIG_SENSORS_IBMPEX=y
# CONFIG_SENSORS_IIO_HWMON is not setCONFIG_SENSORS_IT87=mCONFIG_SENSORS_JC42=yCONFIG_SENSORS_POWR1220=y
# CONFIG_SENSORS_LAN966X is not setCONFIG_SENSORS_LINEAGE=y
# CONFIG_SENSORS_LTC2945 is not set
# CONFIG_SENSORS_LTC2947_I2C is not setCONFIG_SENSORS_LTC2990=m
# CONFIG_SENSORS_LTC2992 is not setCONFIG_SENSORS_LTC4151=yCONFIG_SENSORS_LTC4215=yCONFIG_SENSORS_LTC4222=yCONFIG_SENSORS_LTC4245=yCONFIG_SENSORS_LTC4260=yCONFIG_SENSORS_LTC4261=m
# CONFIG_SENSORS_MAX127 is not setCONFIG_SENSORS_MAX16065=m
# CONFIG_SENSORS_MAX1619 is not setCONFIG_SENSORS_MAX1668=mCONFIG_SENSORS_MAX197=y
# CONFIG_SENSORS_MAX31730 is not setCONFIG_SENSORS_MAX6620=yCONFIG_SENSORS_MAX6621=m
# CONFIG_SENSORS_MAX6639 is not setCONFIG_SENSORS_MAX6642=y
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_MAX6697 is not set
# CONFIG_SENSORS_MAX31790 is not set
# CONFIG_SENSORS_MCP3021 is not setCONFIG_SENSORS_TC654=y
# CONFIG_SENSORS_TPS23861 is not set
# CONFIG_SENSORS_MENF21BMC_HWMON is not set
# CONFIG_SENSORS_MR75203 is not setCONFIG_SENSORS_LM63=yCONFIG_SENSORS_LM73=yCONFIG_SENSORS_LM75=m
# CONFIG_SENSORS_LM77 is not setCONFIG_SENSORS_LM78=yCONFIG_SENSORS_LM80=mCONFIG_SENSORS_LM83=mCONFIG_SENSORS_LM85=m
# CONFIG_SENSORS_LM87 is not set
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not setCONFIG_SENSORS_LM95234=mCONFIG_SENSORS_LM95241=mCONFIG_SENSORS_LM95245=m
# CONFIG_SENSORS_PC87360 is not setCONFIG_SENSORS_PC87427=m
# CONFIG_SENSORS_NTC_THERMISTOR is not set
# CONFIG_SENSORS_NCT6683 is not setCONFIG_SENSORS_NCT6775_CORE=yCONFIG_SENSORS_NCT6775=yCONFIG_SENSORS_NCT6775_I2C=y
# CONFIG_SENSORS_NCT7802 is not setCONFIG_SENSORS_NCT7904=mCONFIG_SENSORS_NPCM7XX=mCONFIG_SENSORS_NSA320=yCONFIG_SENSORS_OCC_P8_I2C=yCONFIG_SENSORS_OCC=yCONFIG_SENSORS_PCF8591=yCONFIG_SENSORS_PECI_CPUTEMP=yCONFIG_SENSORS_PECI_DIMMTEMP=yCONFIG_SENSORS_PECI=yCONFIG_PMBUS=y
# CONFIG_SENSORS_PMBUS is not set
# CONFIG_SENSORS_ADM1266 is not setCONFIG_SENSORS_ADM1275=yCONFIG_SENSORS_BEL_PFE=mCONFIG_SENSORS_BPA_RS600=yCONFIG_SENSORS_DELTA_AHE50DC_FAN=mCONFIG_SENSORS_FSP_3Y=m
# CONFIG_SENSORS_IBM_CFFPS is not setCONFIG_SENSORS_DPS920AB=mCONFIG_SENSORS_INSPUR_IPSPS=mCONFIG_SENSORS_IR35221=yCONFIG_SENSORS_IR36021=mCONFIG_SENSORS_IR38064=y
# CONFIG_SENSORS_IR38064_REGULATOR is not setCONFIG_SENSORS_IRPS5401=yCONFIG_SENSORS_ISL68137=yCONFIG_SENSORS_LM25066=yCONFIG_SENSORS_LM25066_REGULATOR=yCONFIG_SENSORS_LT7182S=yCONFIG_SENSORS_LTC2978=y
# CONFIG_SENSORS_LTC2978_REGULATOR is not setCONFIG_SENSORS_LTC3815=yCONFIG_SENSORS_MAX15301=yCONFIG_SENSORS_MAX16064=mCONFIG_SENSORS_MAX16601=y
# CONFIG_SENSORS_MAX20730 is not set
# CONFIG_SENSORS_MAX20751 is not setCONFIG_SENSORS_MAX31785=m
# CONFIG_SENSORS_MAX34440 is not setCONFIG_SENSORS_MAX8688=m
# CONFIG_SENSORS_MP2888 is not setCONFIG_SENSORS_MP2975=mCONFIG_SENSORS_MP5023=mCONFIG_SENSORS_PIM4328=yCONFIG_SENSORS_PLI1209BC=yCONFIG_SENSORS_PLI1209BC_REGULATOR=yCONFIG_SENSORS_PM6764TR=mCONFIG_SENSORS_PXE1610=y
# CONFIG_SENSORS_Q54SJ108A2 is not setCONFIG_SENSORS_STPDDC60=yCONFIG_SENSORS_TPS40422=yCONFIG_SENSORS_TPS53679=yCONFIG_SENSORS_UCD9000=yCONFIG_SENSORS_UCD9200=y
# CONFIG_SENSORS_XDPE152 is not set
# CONFIG_SENSORS_XDPE122 is not setCONFIG_SENSORS_ZL6100=mCONFIG_SENSORS_PWM_FAN=yCONFIG_SENSORS_RASPBERRYPI_HWMON=mCONFIG_SENSORS_SL28CPLD=yCONFIG_SENSORS_SBTSI=mCONFIG_SENSORS_SBRMI=yCONFIG_SENSORS_SHT15=mCONFIG_SENSORS_SHT21=m
CONFIG_SENSORS_SHT3x=m
# CONFIG_SENSORS_SHT4x is not set
# CONFIG_SENSORS_SHTC1 is not setCONFIG_SENSORS_SIS5595=m
# CONFIG_SENSORS_SY7636A is not setCONFIG_SENSORS_DME1737=y
# CONFIG_SENSORS_EMC1403 is not setCONFIG_SENSORS_EMC2103=y
# CONFIG_SENSORS_EMC6W201 is not setCONFIG_SENSORS_SMSC47M1=mCONFIG_SENSORS_SMSC47M192=m
# CONFIG_SENSORS_SMSC47B397 is not setCONFIG_SENSORS_SCH56XX_COMMON=m
# CONFIG_SENSORS_SCH5627 is not setCONFIG_SENSORS_SCH5636=mCONFIG_SENSORS_STTS751=yCONFIG_SENSORS_SMM665=m
# CONFIG_SENSORS_ADC128D818 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_AMC6821 is not set
# CONFIG_SENSORS_INA209 is not setCONFIG_SENSORS_INA2XX=m
# CONFIG_SENSORS_INA238 is not setCONFIG_SENSORS_INA3221=m
# CONFIG_SENSORS_TC74 is not setCONFIG_SENSORS_THMC50=yCONFIG_SENSORS_TMP102=mCONFIG_SENSORS_TMP103=mCONFIG_SENSORS_TMP108=yCONFIG_SENSORS_TMP401=y
# CONFIG_SENSORS_TMP421 is not setCONFIG_SENSORS_TMP464=mCONFIG_SENSORS_TMP513=y
# CONFIG_SENSORS_VEXPRESS is not setCONFIG_SENSORS_VIA686A=yCONFIG_SENSORS_VT1211=mCONFIG_SENSORS_VT8231=m
# CONFIG_SENSORS_W83773G is not setCONFIG_SENSORS_W83781D=mCONFIG_SENSORS_W83791D=y
# CONFIG_SENSORS_W83792D is not setCONFIG_SENSORS_W83793=mCONFIG_SENSORS_W83795=yCONFIG_SENSORS_W83795_FANCTRL=yCONFIG_SENSORS_W83L785TS=m
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not setCONFIG_SENSORS_W83627EHF=m
# CONFIG_THERMAL is not setCONFIG_WATCHDOG=yCONFIG_WATCHDOG_CORE=yCONFIG_WATCHDOG_NOWAYOUT=y
# CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED is not setCONFIG_WATCHDOG_OPEN_TIMEOUT=0
# CONFIG_WATCHDOG_SYSFS is not set
# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set
#
# Watchdog Pretimeout Governors
#
# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set
#
# Watchdog Device Drivers
#CONFIG_SOFT_WATCHDOG=mCONFIG_BD957XMUF_WATCHDOG=mCONFIG_DA9052_WATCHDOG=m
# CONFIG_DA9055_WATCHDOG is not set
# CONFIG_DA9063_WATCHDOG is not setCONFIG_DA9062_WATCHDOG=mCONFIG_GPIO_WATCHDOG=y
# CONFIG_GPIO_WATCHDOG_ARCH_INITCALL is not set
# CONFIG_MENF21BMC_WATCHDOG is not set
# CONFIG_MENZ069_WATCHDOG is not set
# CONFIG_XILINX_WATCHDOG is not set
# CONFIG_ZIIRAVE_WATCHDOG is not set
# CONFIG_SL28CPLD_WATCHDOG is not setCONFIG_ARM_SP805_WATCHDOG=y
# CONFIG_ARM_SBSA_WATCHDOG is not set
# CONFIG_ARMADA_37XX_WATCHDOG is not setCONFIG_ASM9260_WATCHDOG=y
# CONFIG_AT91RM9200_WATCHDOG is not set
# CONFIG_AT91SAM9X_WATCHDOG is not setCONFIG_SAMA5D4_WATCHDOG=yCONFIG_CADENCE_WATCHDOG=y
# CONFIG_FTWDT010_WATCHDOG is not setCONFIG_S3C2410_WATCHDOG=m
# CONFIG_DW_WATCHDOG is not set
# CONFIG_EP93XX_WATCHDOG is not setCONFIG_OMAP_WATCHDOG=mCONFIG_PNX4008_WATCHDOG=mCONFIG_DAVINCI_WATCHDOG=y
# CONFIG_K3_RTI_WATCHDOG is not set
# CONFIG_RN5T618_WATCHDOG is not setCONFIG_SUNXI_WATCHDOG=mCONFIG_NPCM7XX_WATCHDOG=mCONFIG_TWL4030_WATCHDOG=mCONFIG_STMP3XXX_RTC_WATCHDOG=m
# CONFIG_TS4800_WATCHDOG is not set
# CONFIG_TS72XX_WATCHDOG is not setCONFIG_MAX63XX_WATCHDOG=y
# CONFIG_MAX77620_WATCHDOG is not setCONFIG_IMX2_WDT=y
# CONFIG_IMX7ULP_WDT is not setCONFIG_RETU_WATCHDOG=mCONFIG_MOXART_WDT=y
# CONFIG_ST_LPC_WATCHDOG is not setCONFIG_TEGRA_WATCHDOG=y
# CONFIG_QCOM_WDT is not set
# CONFIG_MESON_GXBB_WATCHDOG is not setCONFIG_MESON_WATCHDOG=m
# CONFIG_MEDIATEK_WATCHDOG is not setCONFIG_DIGICOLOR_WATCHDOG=m
# CONFIG_ARM_SMC_WATCHDOG is not set
# CONFIG_LPC18XX_WATCHDOG is not setCONFIG_RENESAS_WDT=y
# CONFIG_RENESAS_RZAWDT is not setCONFIG_RENESAS_RZN1WDT=yCONFIG_RENESAS_RZG2LWDT=yCONFIG_ASPEED_WATCHDOG=y
# CONFIG_STPMIC1_WATCHDOG is not set
# CONFIG_UNIPHIER_WATCHDOG is not setCONFIG_RTD119X_WATCHDOG=yCONFIG_REALTEK_OTTO_WDT=yCONFIG_SPRD_WATCHDOG=mCONFIG_PM8916_WATCHDOG=mCONFIG_VISCONTI_WATCHDOG=yCONFIG_MSC313E_WATCHDOG=mCONFIG_APPLE_WATCHDOG=mCONFIG_SUNPLUS_WATCHDOG=yCONFIG_ALIM7101_WDT=y
# CONFIG_SC520_WDT is not set
# CONFIG_I6300ESB_WDT is not set
# CONFIG_KEMPLD_WDT is not setCONFIG_RDC321X_WDT=yCONFIG_BCM47XX_WDT=mCONFIG_BCM2835_WDT=yCONFIG_BCM_KONA_WDT=y
# CONFIG_BCM_KONA_WDT_DEBUG is not setCONFIG_BCM7038_WDT=mCONFIG_IMGPDC_WDT=mCONFIG_MPC5200_WDT=y
# CONFIG_MEN_A21_WDT is not set
# CONFIG_XEN_WDT is not setCONFIG_UML_WATCHDOG=y
#
# PCI-based Watchdog Cards
#CONFIG_PCIPCWATCHDOG=mCONFIG_WDTPCI=y
# CONFIG_KEEMBAY_WATCHDOG is not setCONFIG_SSB_POSSIBLE=yCONFIG_SSB=yCONFIG_SSB_PCIHOST_POSSIBLE=y
# CONFIG_SSB_PCIHOST is not setCONFIG_SSB_PCMCIAHOST_POSSIBLE=y
# CONFIG_SSB_PCMCIAHOST is not set
# CONFIG_SSB_DRIVER_GPIO is not setCONFIG_BCMA_POSSIBLE=yCONFIG_BCMA=mCONFIG_BCMA_HOST_PCI_POSSIBLE=y
# CONFIG_BCMA_HOST_PCI is not setCONFIG_BCMA_HOST_SOC=y
# CONFIG_BCMA_DRIVER_PCI is not setCONFIG_BCMA_DRIVER_MIPS=yCONFIG_BCMA_PFLASH=yCONFIG_BCMA_SFLASH=yCONFIG_BCMA_NFLASH=yCONFIG_BCMA_DRIVER_GMAC_CMN=yCONFIG_BCMA_DRIVER_GPIO=y
# CONFIG_BCMA_DEBUG is not set
#
# Multifunction device drivers
#CONFIG_MFD_CORE=y
# CONFIG_MFD_ALTERA_SYSMGR is not setCONFIG_MFD_ACT8945A=yCONFIG_MFD_SUN4I_GPADC=y
# CONFIG_MFD_AS3711 is not setCONFIG_MFD_AS3722=m
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_AAT2870_CORE is not setCONFIG_MFD_AT91_USART=yCONFIG_MFD_ATMEL_FLEXCOM=y
# CONFIG_MFD_ATMEL_HLCDC is not set
# CONFIG_MFD_BCM590XX is not set
# CONFIG_MFD_BD9571MWV is not set
# CONFIG_MFD_AC100 is not setCONFIG_MFD_AXP20X=yCONFIG_MFD_AXP20X_I2C=y
# CONFIG_MFD_AXP20X_RSB is not setCONFIG_MFD_CROS_EC_DEV=mCONFIG_MFD_MADERA=yCONFIG_MFD_MADERA_I2C=m
# CONFIG_MFD_CS47L15 is not set
# CONFIG_MFD_CS47L35 is not setCONFIG_MFD_CS47L85=y
# CONFIG_MFD_CS47L90 is not setCONFIG_MFD_CS47L92=yCONFIG_MFD_ASIC3=y
# CONFIG_PMIC_DA903X is not setCONFIG_PMIC_DA9052=yCONFIG_MFD_DA9052_I2C=y
# CONFIG_MFD_DA9055 is not setCONFIG_MFD_DA9062=yCONFIG_MFD_DA9063=yCONFIG_MFD_DA9150=mCONFIG_MFD_ENE_KB3930=mCONFIG_MFD_EXYNOS_LPASS=mCONFIG_MFD_GATEWORKS_GSC=mCONFIG_MFD_MC13XXX=mCONFIG_MFD_MC13XXX_I2C=mCONFIG_MFD_MP2629=m
# CONFIG_MFD_MXS_LRADC is not setCONFIG_MFD_MX25_TSADC=m
# CONFIG_MFD_HI6421_PMIC is not setCONFIG_MFD_HI6421_SPMI=mCONFIG_MFD_HI655X_PMIC=m
# CONFIG_HTC_PASIC3 is not set
# CONFIG_HTC_I2CPLD is not set
# CONFIG_LPC_ICH is not setCONFIG_LPC_SCH=yCONFIG_MFD_IQS62X=mCONFIG_MFD_JANZ_CMODIO=yCONFIG_MFD_KEMPLD=yCONFIG_MFD_88PM800=mCONFIG_MFD_88PM805=m
# CONFIG_MFD_88PM860X is not setCONFIG_MFD_MAX14577=y
# CONFIG_MFD_MAX77620 is not setCONFIG_MFD_MAX77650=m
# CONFIG_MFD_MAX77686 is not set
# CONFIG_MFD_MAX77693 is not setCONFIG_MFD_MAX77714=yCONFIG_MFD_MAX77843=yCONFIG_MFD_MAX8907=y
# CONFIG_MFD_MAX8925 is not set
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_MT6360 is not setCONFIG_MFD_MT6397=yCONFIG_MFD_MENF21BMC=mCONFIG_MFD_NTXEC=yCONFIG_MFD_RETU=mCONFIG_MFD_PCF50633=mCONFIG_PCF50633_ADC=m
# CONFIG_PCF50633_GPIO is not setCONFIG_UCB1400_CORE=mCONFIG_MFD_PM8XXX=yCONFIG_MFD_QCOM_RPM=yCONFIG_MFD_SPMI_PMIC=mCONFIG_MFD_RDC321X=yCONFIG_MFD_RT4831=mCONFIG_MFD_RT5033=m
# CONFIG_MFD_RC5T583 is not setCONFIG_MFD_RK808=mCONFIG_MFD_RN5T618=mCONFIG_MFD_SEC_CORE=mCONFIG_MFD_SI476X_CORE=y
# CONFIG_MFD_SIMPLE_MFD_I2C is not set
# CONFIG_MFD_SL28CPLD is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_SKY81452 is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_MFD_STMPE is not setCONFIG_MFD_SUN6I_PRCM=yCONFIG_MFD_SYSCON=yCONFIG_MFD_TI_AM335X_TSCADC=m
# CONFIG_MFD_LP3943 is not set
# CONFIG_MFD_LP8788 is not set
# CONFIG_MFD_TI_LMU is not setCONFIG_MFD_PALMAS=yCONFIG_TPS6105X=m
# CONFIG_TPS65010 is not setCONFIG_TPS6507X=y
# CONFIG_MFD_TPS65086 is not set
# CONFIG_MFD_TPS65090 is not setCONFIG_MFD_TPS65217=mCONFIG_MFD_TI_LP873X=yCONFIG_MFD_TI_LP87565=y
# CONFIG_MFD_TPS65218 is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_TPS65910 is not setCONFIG_MFD_TPS65912=mCONFIG_MFD_TPS65912_I2C=mCONFIG_TWL4030_CORE=yCONFIG_MFD_TWL4030_AUDIO=y
# CONFIG_TWL6040_CORE is not setCONFIG_MFD_WL1273_CORE=mCONFIG_MFD_LM3533=mCONFIG_MFD_TIMBERDALE=mCONFIG_MFD_TC3589X=yCONFIG_MFD_TQMX86=y
# CONFIG_MFD_VX855 is not set
# CONFIG_MFD_LOCHNAGAR is not setCONFIG_MFD_ARIZONA=yCONFIG_MFD_ARIZONA_I2C=yCONFIG_MFD_CS47L24=yCONFIG_MFD_WM5102=y
# CONFIG_MFD_WM5110 is not setCONFIG_MFD_WM8997=yCONFIG_MFD_WM8998=y
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X_I2C is not set
# CONFIG_MFD_WM8350_I2C is not setCONFIG_MFD_WM8994=mCONFIG_MFD_STW481X=y
# CONFIG_MFD_ROHM_BD718XX is not setCONFIG_MFD_ROHM_BD71828=mCONFIG_MFD_ROHM_BD957XMUF=mCONFIG_MFD_STM32_LPTIMER=yCONFIG_MFD_STM32_TIMERS=mCONFIG_MFD_STPMIC1=yCONFIG_MFD_STMFX=y
# CONFIG_MFD_WCD934X is not setCONFIG_MFD_ATC260X=yCONFIG_MFD_ATC260X_I2C=yCONFIG_MFD_KHADAS_MCU=m
# CONFIG_MFD_ACER_A500_EC is not setCONFIG_MFD_QCOM_PM8008=yCONFIG_MFD_VEXPRESS_SYSREG=m
# CONFIG_MFD_RSMU_I2C is not set
# end of Multifunction device drivers
CONFIG_REGULATOR=yCONFIG_REGULATOR_DEBUG=yCONFIG_REGULATOR_FIXED_VOLTAGE=m
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not setCONFIG_REGULATOR_88PG86X=yCONFIG_REGULATOR_88PM800=mCONFIG_REGULATOR_ACT8865=yCONFIG_REGULATOR_ACT8945A=yCONFIG_REGULATOR_AD5398=mCONFIG_REGULATOR_ANATOP=y
# CONFIG_REGULATOR_ARIZONA_LDO1 is not setCONFIG_REGULATOR_ARIZONA_MICSUPP=m
# CONFIG_REGULATOR_ARM_SCMI is not setCONFIG_REGULATOR_AS3722=mCONFIG_REGULATOR_ATC260X=y
# CONFIG_REGULATOR_AXP20X is not setCONFIG_REGULATOR_BD71815=m
# CONFIG_REGULATOR_BD71828 is not setCONFIG_REGULATOR_BD957XMUF=mCONFIG_REGULATOR_CROS_EC=mCONFIG_REGULATOR_DA9052=mCONFIG_REGULATOR_DA9062=yCONFIG_REGULATOR_DA9063=y
# CONFIG_REGULATOR_DA9121 is not set
# CONFIG_REGULATOR_DA9210 is not set
# CONFIG_REGULATOR_DA9211 is not set
# CONFIG_REGULATOR_FAN53555 is not setCONFIG_REGULATOR_FAN53880=yCONFIG_REGULATOR_GPIO=yCONFIG_REGULATOR_HI655X=mCONFIG_REGULATOR_HI6421V600=m
# CONFIG_REGULATOR_ISL9305 is not set
# CONFIG_REGULATOR_ISL6271A is not setCONFIG_REGULATOR_LP3971=mCONFIG_REGULATOR_LP3972=y
# CONFIG_REGULATOR_LP872X is not setCONFIG_REGULATOR_LP873X=y
# CONFIG_REGULATOR_LP8755 is not setCONFIG_REGULATOR_LP87565=mCONFIG_REGULATOR_LTC3589=yCONFIG_REGULATOR_LTC3676=yCONFIG_REGULATOR_MAX14577=y
# CONFIG_REGULATOR_MAX1586 is not setCONFIG_REGULATOR_MAX77620=mCONFIG_REGULATOR_MAX77650=mCONFIG_REGULATOR_MAX8649=y
# CONFIG_REGULATOR_MAX8660 is not setCONFIG_REGULATOR_MAX8893=y
# CONFIG_REGULATOR_MAX8907 is not setCONFIG_REGULATOR_MAX8952=mCONFIG_REGULATOR_MAX20086=m
# CONFIG_REGULATOR_MAX77686 is not setCONFIG_REGULATOR_MAX77693=mCONFIG_REGULATOR_MAX77802=m
# CONFIG_REGULATOR_MAX77826 is not setCONFIG_REGULATOR_MC13XXX_CORE=m
# CONFIG_REGULATOR_MC13783 is not setCONFIG_REGULATOR_MC13892=mCONFIG_REGULATOR_MCP16502=yCONFIG_REGULATOR_MP5416=y
# CONFIG_REGULATOR_MP8859 is not setCONFIG_REGULATOR_MP886X=m
# CONFIG_REGULATOR_MPQ7920 is not setCONFIG_REGULATOR_MT6311=mCONFIG_REGULATOR_MT6315=m
# CONFIG_REGULATOR_MT6323 is not set
# CONFIG_REGULATOR_MT6358 is not set
# CONFIG_REGULATOR_MT6359 is not set
# CONFIG_REGULATOR_MT6380 is not setCONFIG_REGULATOR_MT6397=y
# CONFIG_REGULATOR_PALMAS is not setCONFIG_REGULATOR_PBIAS=yCONFIG_REGULATOR_PCA9450=yCONFIG_REGULATOR_PCF50633=mCONFIG_REGULATOR_PF8X00=yCONFIG_REGULATOR_PFUZE100=mCONFIG_REGULATOR_PV88060=mCONFIG_REGULATOR_PV88080=m
# CONFIG_REGULATOR_PV88090 is not setCONFIG_REGULATOR_PWM=m
# CONFIG_REGULATOR_QCOM_RPM is not setCONFIG_REGULATOR_QCOM_RPMH=mCONFIG_REGULATOR_QCOM_SPMI=mCONFIG_REGULATOR_QCOM_USB_VBUS=yCONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=mCONFIG_REGULATOR_RK808=mCONFIG_REGULATOR_RN5T618=mCONFIG_REGULATOR_ROHM=mCONFIG_REGULATOR_RT4801=yCONFIG_REGULATOR_RT4831=mCONFIG_REGULATOR_RT5033=m
# CONFIG_REGULATOR_RT5190A is not set
# CONFIG_REGULATOR_RT5759 is not setCONFIG_REGULATOR_RT6160=mCONFIG_REGULATOR_RT6245=mCONFIG_REGULATOR_RTQ2134=m
# CONFIG_REGULATOR_RTMV20 is not setCONFIG_REGULATOR_RTQ6752=y
# CONFIG_REGULATOR_S2MPA01 is not setCONFIG_REGULATOR_S2MPS11=y
# CONFIG_REGULATOR_S5M8767 is not set
# CONFIG_REGULATOR_SC2731 is not setCONFIG_REGULATOR_SLG51000=yCONFIG_REGULATOR_STM32_BOOSTER=y
# CONFIG_REGULATOR_STM32_VREFBUF is not setCONFIG_REGULATOR_STM32_PWR=y
# CONFIG_REGULATOR_STPMIC1 is not setCONFIG_REGULATOR_TI_ABB=mCONFIG_REGULATOR_STW481X_VMMC=y
# CONFIG_REGULATOR_SY7636A is not setCONFIG_REGULATOR_SY8106A=yCONFIG_REGULATOR_SY8824X=mCONFIG_REGULATOR_SY8827N=mCONFIG_REGULATOR_TPS51632=y
# CONFIG_REGULATOR_TPS6105X is not setCONFIG_REGULATOR_TPS62360=yCONFIG_REGULATOR_TPS6286X=m
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not setCONFIG_REGULATOR_TPS65132=yCONFIG_REGULATOR_TPS65217=m
# CONFIG_REGULATOR_TPS65912 is not setCONFIG_REGULATOR_TPS68470=mCONFIG_REGULATOR_TWL4030=yCONFIG_REGULATOR_UNIPHIER=m
# CONFIG_REGULATOR_VCTRL is not setCONFIG_REGULATOR_VEXPRESS=yCONFIG_REGULATOR_VQMMC_IPQ4019=mCONFIG_REGULATOR_WM8994=mCONFIG_REGULATOR_QCOM_LABIBB=mCONFIG_RC_CORE=m
# CONFIG_LIRC is not setCONFIG_RC_MAP=m
# CONFIG_RC_DECODERS is not setCONFIG_RC_DEVICES=yCONFIG_IR_ENE=mCONFIG_IR_FINTEK=mCONFIG_IR_GPIO_CIR=m
# CONFIG_IR_HIX5HD2 is not setCONFIG_IR_ITE_CIR=mCONFIG_IR_MESON=mCONFIG_IR_MESON_TX=m
# CONFIG_IR_MTK is not setCONFIG_IR_NUVOTON=mCONFIG_IR_RX51=mCONFIG_IR_SERIAL=mCONFIG_IR_SERIAL_TRANSMITTER=y
# CONFIG_IR_SUNXI is not setCONFIG_IR_WINBOND_CIR=mCONFIG_RC_LOOPBACK=mCONFIG_RC_ST=mCONFIG_IR_IMG=m
# CONFIG_IR_IMG_RAW is not setCONFIG_IR_IMG_HW=y
# CONFIG_IR_IMG_NEC is not set
# CONFIG_IR_IMG_JVC is not setCONFIG_IR_IMG_SONY=yCONFIG_IR_IMG_SHARP=yCONFIG_IR_IMG_SANYO=y
# CONFIG_IR_IMG_RC5 is not setCONFIG_IR_IMG_RC6=y
#
# CEC support
#
# CONFIG_MEDIA_CEC_SUPPORT is not set
# end of CEC support
# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#CONFIG_APERTURE_HELPERS=y
# CONFIG_TEGRA_HOST1X is not setCONFIG_IMX_IPUV3_CORE=mCONFIG_DRM=yCONFIG_DRM_MIPI_DSI=yCONFIG_DRM_DEBUG_MM=yCONFIG_DRM_DEBUG_SELFTEST=yCONFIG_DRM_KMS_HELPER=y
# CONFIG_DRM_FBDEV_EMULATION is not set
# CONFIG_DRM_LOAD_EDID_FIRMWARE is not setCONFIG_DRM_DP_AUX_BUS=mCONFIG_DRM_DISPLAY_HELPER=yCONFIG_DRM_DISPLAY_DP_HELPER=yCONFIG_DRM_DISPLAY_HDCP_HELPER=yCONFIG_DRM_DISPLAY_HDMI_HELPER=y
# CONFIG_DRM_DP_AUX_CHARDEV is not set
# CONFIG_DRM_DP_CEC is not setCONFIG_DRM_TTM=yCONFIG_DRM_BUDDY=yCONFIG_DRM_VRAM_HELPER=yCONFIG_DRM_TTM_HELPER=yCONFIG_DRM_GEM_CMA_HELPER=yCONFIG_DRM_GEM_SHMEM_HELPER=yCONFIG_DRM_SCHED=y
#
# I2C encoder or helper chips
#
# CONFIG_DRM_I2C_CH7006 is not setCONFIG_DRM_I2C_SIL164=m
# CONFIG_DRM_I2C_NXP_TDA998X is not set
# CONFIG_DRM_I2C_NXP_TDA9950 is not set
# end of I2C encoder or helper chips
#
# ARM devices
#CONFIG_DRM_HDLCD=yCONFIG_DRM_HDLCD_SHOW_UNDERRUN=y
# CONFIG_DRM_MALI_DISPLAY is not setCONFIG_DRM_KOMEDA=m
# end of ARM devices
CONFIG_DRM_RADEON=yCONFIG_DRM_RADEON_USERPTR=yCONFIG_DRM_AMDGPU=y
# CONFIG_DRM_AMDGPU_SI is not setCONFIG_DRM_AMDGPU_CIK=y
# CONFIG_DRM_AMDGPU_USERPTR is not set
#
# ACP (Audio CoProcessor) Configuration
#CONFIG_DRM_AMD_ACP=y
# end of ACP (Audio CoProcessor) Configuration
#
# Display Engine Configuration
#CONFIG_DRM_AMD_DC=y
# CONFIG_DRM_AMD_DC_HDCP is not set
# end of Display Engine Configuration
# CONFIG_HSA_AMD is not setCONFIG_DRM_NOUVEAU=m
# CONFIG_NOUVEAU_LEGACY_CTX_SUPPORT is not setCONFIG_NOUVEAU_PLATFORM_DRIVER=yCONFIG_NOUVEAU_DEBUG=5CONFIG_NOUVEAU_DEBUG_DEFAULT=3
# CONFIG_NOUVEAU_DEBUG_MMU is not set
# CONFIG_NOUVEAU_DEBUG_PUSH is not setCONFIG_DRM_NOUVEAU_BACKLIGHT=yCONFIG_DRM_KMB_DISPLAY=yCONFIG_DRM_VGEM=yCONFIG_DRM_VKMS=y
# CONFIG_DRM_EXYNOS is not setCONFIG_DRM_ROCKCHIP=m
# CONFIG_ROCKCHIP_VOP is not set
# CONFIG_ROCKCHIP_VOP2 is not setCONFIG_ROCKCHIP_CDN_DP=y
# CONFIG_ROCKCHIP_DW_HDMI is not setCONFIG_ROCKCHIP_DW_MIPI_DSI=yCONFIG_ROCKCHIP_INNO_HDMI=yCONFIG_ROCKCHIP_LVDS=yCONFIG_ROCKCHIP_RGB=yCONFIG_ROCKCHIP_RK3066_HDMI=y
# CONFIG_DRM_VMWGFX is not setCONFIG_DRM_AST=yCONFIG_DRM_MGAG200=yCONFIG_DRM_RCAR_DU=m
# CONFIG_DRM_RCAR_USE_CMM is not setCONFIG_DRM_RCAR_DW_HDMI=yCONFIG_DRM_RCAR_USE_LVDS=yCONFIG_DRM_RCAR_LVDS=m
# CONFIG_DRM_RCAR_MIPI_DSI is not setCONFIG_DRM_RCAR_WRITEBACK=yCONFIG_DRM_SUN4I=m
# CONFIG_DRM_SUN4I_HDMI is not set
# CONFIG_DRM_SUN4I_BACKEND is not setCONFIG_DRM_SUN6I_DSI=mCONFIG_DRM_SUN8I_DW_HDMI=mCONFIG_DRM_SUN8I_MIXER=mCONFIG_DRM_SUN8I_TCON_TOP=mCONFIG_DRM_QXL=m
# CONFIG_DRM_MSM is not set
# CONFIG_DRM_TEGRA is not setCONFIG_DRM_PANEL=y
#
# Display Panels
#CONFIG_DRM_PANEL_ARM_VERSATILE=m
# CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596 is not set CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=m CONFIG_DRM_PANEL_BOE_HIMAX8279D=y CONFIG_DRM_PANEL_BOE_TV101WUM_NL6=m
# CONFIG_DRM_PANEL_DSI_CM is not set CONFIG_DRM_PANEL_LVDS=m CONFIG_DRM_PANEL_SIMPLE=y CONFIG_DRM_PANEL_EDP=m
# CONFIG_DRM_PANEL_EBBG_FT8719 is not set CONFIG_DRM_PANEL_ELIDA_KD35T133=y CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=y
# CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D is not set CONFIG_DRM_PANEL_ILITEK_ILI9881C=y
# CONFIG_DRM_PANEL_INNOLUX_P079ZCA is not set CONFIG_DRM_PANEL_JDI_LT070ME05000=y
# CONFIG_DRM_PANEL_JDI_R63452 is not set CONFIG_DRM_PANEL_KHADAS_TS050=y CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=y CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W=y CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829=y
# CONFIG_DRM_PANEL_NOVATEK_NT35510 is not set # CONFIG_DRM_PANEL_NOVATEK_NT35560 is not set CONFIG_DRM_PANEL_NOVATEK_NT35950=m CONFIG_DRM_PANEL_NOVATEK_NT36672A=y CONFIG_DRM_PANEL_MANTIX_MLAF057WE51=y CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=m CONFIG_DRM_PANEL_ORISETECH_OTM8009A=m CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=y CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=y CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=m CONFIG_DRM_PANEL_RAYDIUM_RM67191=y CONFIG_DRM_PANEL_RAYDIUM_RM68200=m
# CONFIG_DRM_PANEL_RONBO_RB070D30 is not set # CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set CONFIG_DRM_PANEL_SAMSUNG_S6D16D0=y CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2=y CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03=y CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=m
# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI is not set CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=m CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0=y CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=m CONFIG_DRM_PANEL_SEIKO_43WVF1G=y CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=y CONFIG_DRM_PANEL_SHARP_LS037V7DW01=m CONFIG_DRM_PANEL_SHARP_LS043T1LE01=m
# CONFIG_DRM_PANEL_SHARP_LS060T1SX01 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7701 is not set # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=y CONFIG_DRM_PANEL_TDO_TL070WSH30=m
# CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA is not set CONFIG_DRM_PANEL_VISIONOX_RM69299=m CONFIG_DRM_PANEL_XINPENG_XPP055C272=m
# end of Display Panels
CONFIG_DRM_BRIDGE=yCONFIG_DRM_PANEL_BRIDGE=y
#
# Display Interface Bridges
#CONFIG_DRM_CDNS_DSI=m
# CONFIG_DRM_CHIPONE_ICN6211 is not set
# CONFIG_DRM_CHRONTEL_CH7033 is not set
# CONFIG_DRM_CROS_EC_ANX7688 is not setCONFIG_DRM_DISPLAY_CONNECTOR=m
# CONFIG_DRM_FSL_LDB is not setCONFIG_DRM_ITE_IT6505=m
# CONFIG_DRM_LONTIUM_LT8912B is not set
# CONFIG_DRM_LONTIUM_LT9211 is not setCONFIG_DRM_LONTIUM_LT9611=mCONFIG_DRM_LONTIUM_LT9611UXC=mCONFIG_DRM_ITE_IT66121=y
# CONFIG_DRM_LVDS_CODEC is not setCONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=m
# CONFIG_DRM_NWL_MIPI_DSI is not setCONFIG_DRM_NXP_PTN3460=yCONFIG_DRM_PARADE_PS8622=y
# CONFIG_DRM_PARADE_PS8640 is not setCONFIG_DRM_SIL_SII8620=mCONFIG_DRM_SII902X=m
# CONFIG_DRM_SII9234 is not setCONFIG_DRM_SIMPLE_BRIDGE=mCONFIG_DRM_THINE_THC63LVD1024=m
# CONFIG_DRM_TOSHIBA_TC358762 is not setCONFIG_DRM_TOSHIBA_TC358764=m
# CONFIG_DRM_TOSHIBA_TC358767 is not setCONFIG_DRM_TOSHIBA_TC358768=yCONFIG_DRM_TOSHIBA_TC358775=m
# CONFIG_DRM_TI_DLPC3433 is not setCONFIG_DRM_TI_TFP410=mCONFIG_DRM_TI_SN65DSI83=y
# CONFIG_DRM_TI_SN65DSI86 is not set
# CONFIG_DRM_TI_TPD12S015 is not set
# CONFIG_DRM_ANALOGIX_ANX6345 is not setCONFIG_DRM_ANALOGIX_ANX78XX=yCONFIG_DRM_ANALOGIX_DP=yCONFIG_DRM_ANALOGIX_ANX7625=mCONFIG_DRM_I2C_ADV7511=mCONFIG_DRM_I2C_ADV7511_AUDIO=y
# CONFIG_DRM_I2C_ADV7511_CEC is not setCONFIG_DRM_CDNS_MHDP8546=y
# CONFIG_DRM_CDNS_MHDP8546_J721E is not set
# CONFIG_DRM_IMX8QM_LDB is not setCONFIG_DRM_IMX8QXP_LDB=yCONFIG_DRM_IMX8QXP_PIXEL_COMBINER=m
# CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI is not setCONFIG_DRM_DW_HDMI=yCONFIG_DRM_DW_HDMI_AHB_AUDIO=mCONFIG_DRM_DW_HDMI_I2S_AUDIO=mCONFIG_DRM_DW_HDMI_GP_AUDIO=m
# CONFIG_DRM_DW_HDMI_CEC is not setCONFIG_DRM_DW_MIPI_DSI=m
# end of Display Interface Bridges
CONFIG_DRM_IMX=mCONFIG_DRM_IMX_PARALLEL_DISPLAY=m
# CONFIG_DRM_IMX_TVE is not set
# CONFIG_DRM_IMX_LDB is not set
# CONFIG_DRM_IMX_HDMI is not setCONFIG_DRM_INGENIC=m
# CONFIG_DRM_INGENIC_IPU is not set
# CONFIG_DRM_V3D is not set
# CONFIG_DRM_VC4 is not setCONFIG_DRM_ETNAVIV=m
# CONFIG_DRM_ETNAVIV_THERMAL is not set
# CONFIG_DRM_HISI_HIBMC is not set
# CONFIG_DRM_HISI_KIRIN is not setCONFIG_DRM_LOGICVC=m
# CONFIG_DRM_MEDIATEK is not set
# CONFIG_DRM_MXSFB is not set
# CONFIG_DRM_IMX_LCDIF is not set
# CONFIG_DRM_MESON is not set
# CONFIG_DRM_ARCPGU is not set
# CONFIG_DRM_BOCHS is not setCONFIG_DRM_CIRRUS_QEMU=yCONFIG_DRM_SIMPLEDRM=mCONFIG_DRM_PL111=y
# CONFIG_DRM_TVE200 is not setCONFIG_DRM_XEN=yCONFIG_DRM_XEN_FRONTEND=yCONFIG_DRM_LIMA=yCONFIG_DRM_PANFROST=mCONFIG_DRM_ASPEED_GFX=yCONFIG_DRM_MCDE=m
# CONFIG_DRM_TIDSS is not setCONFIG_DRM_SSD130X=y
# CONFIG_DRM_SSD130X_I2C is not setCONFIG_DRM_SPRD=m
# CONFIG_DRM_LEGACY is not setCONFIG_DRM_EXPORT_FOR_TESTS=yCONFIG_DRM_PANEL_ORIENTATION_QUIRKS=yCONFIG_DRM_NOMODESET=yCONFIG_DRM_LIB_RANDOM=y
#
# Frame buffer Devices
#CONFIG_FB_CMDLINE=yCONFIG_FB_NOTIFY=yCONFIG_FB=y
# CONFIG_FIRMWARE_EDID is not setCONFIG_FB_DDC=yCONFIG_FB_CFB_FILLRECT=yCONFIG_FB_CFB_COPYAREA=yCONFIG_FB_CFB_IMAGEBLIT=yCONFIG_FB_SYS_FILLRECT=yCONFIG_FB_SYS_COPYAREA=yCONFIG_FB_SYS_IMAGEBLIT=yCONFIG_FB_FOREIGN_ENDIAN=y
# CONFIG_FB_BOTH_ENDIAN is not setCONFIG_FB_BIG_ENDIAN=y
# CONFIG_FB_LITTLE_ENDIAN is not setCONFIG_FB_SYS_FOPS=yCONFIG_FB_DEFERRED_IO=yCONFIG_FB_SVGALIB=mCONFIG_FB_BACKLIGHT=yCONFIG_FB_MODE_HELPERS=yCONFIG_FB_TILEBLITTING=y
#
# Frame buffer hardware drivers
#CONFIG_FB_CIRRUS=y
# CONFIG_FB_PM2 is not set
# CONFIG_FB_ARMCLCD is not set
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_IMX is not set CONFIG_FB_CYBER2000=m
# CONFIG_FB_CYBER2000_DDC is not set
# CONFIG_FB_ARC is not set
# CONFIG_FB_CONTROL is not set
# CONFIG_FB_ASILIANT is not set CONFIG_FB_IMSTT=yCONFIG_FB_GBE=yCONFIG_FB_GBE_MEM=4CONFIG_FB_PVR2=yCONFIG_FB_OPENCORES=mCONFIG_FB_S1D13XXX=mCONFIG_FB_ATMEL=y
# CONFIG_FB_NVIDIA is not setCONFIG_FB_RIVA=yCONFIG_FB_RIVA_I2C=yCONFIG_FB_RIVA_DEBUG=y
# CONFIG_FB_RIVA_BACKLIGHT is not set CONFIG_FB_I740=y
# CONFIG_FB_MATROX is not set CONFIG_FB_RADEON=y
# CONFIG_FB_RADEON_I2C is not set
# CONFIG_FB_RADEON_BACKLIGHT is not set CONFIG_FB_RADEON_DEBUG=y
# CONFIG_FB_ATY128 is not set
# CONFIG_FB_ATY is not set
# CONFIG_FB_S3 is not set
# CONFIG_FB_SAVAGE is not setCONFIG_FB_SIS=mCONFIG_FB_SIS_300=y
# CONFIG_FB_SIS_315 is not set
# CONFIG_FB_VIA is not set CONFIG_FB_NEOMAGIC=yCONFIG_FB_KYRO=y
# CONFIG_FB_3DFX is not set CONFIG_FB_VOODOO1=yCONFIG_FB_VT8623=mCONFIG_FB_TRIDENT=y
# CONFIG_FB_ARK is not setCONFIG_FB_PM3=mCONFIG_FB_CARMINE=y CONFIG_FB_CARMINE_DRAM_EVAL=y
# CONFIG_CARMINE_DRAM_CUSTOM is not set
# CONFIG_FB_WM8505 is not set
# CONFIG_FB_PXA168 is not setCONFIG_FB_W100=m
# CONFIG_FB_SH_MOBILE_LCDC is not set CONFIG_FB_TMIO=y
# CONFIG_FB_TMIO_ACCELL is not set
# CONFIG_FB_S3C is not set CONFIG_FB_IBM_GXT4500=mCONFIG_FB_XILINX=mCONFIG_FB_GOLDFISH=m
# CONFIG_FB_DA8XX is not set CONFIG_FB_VIRTUAL=y CONFIG_XEN_FBDEV_FRONTEND=m CONFIG_FB_METRONOME=y
# CONFIG_FB_MB862XX is not set CONFIG_FB_BROADSHEET=m
# CONFIG_FB_SIMPLE is not set CONFIG_FB_SSD1307=yCONFIG_FB_SM712=yCONFIG_FB_OMAP2=m
# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set CONFIG_FB_OMAP2_NUM_FBS=3 CONFIG_FB_OMAP2_DSS_INIT=y CONFIG_FB_OMAP2_DSS=m
# CONFIG_FB_OMAP2_DSS_DEBUG is not set CONFIG_FB_OMAP2_DSS_DEBUGFS=y
# CONFIG_FB_OMAP2_DSS_COLLECT_IRQ_STATS is not set # CONFIG_FB_OMAP2_DSS_DPI is not set CONFIG_FB_OMAP2_DSS_VENC=y CONFIG_FB_OMAP2_DSS_HDMI_COMMON=y
# CONFIG_FB_OMAP4_DSS_HDMI is not set CONFIG_FB_OMAP5_DSS_HDMI=y CONFIG_FB_OMAP2_DSS_SDI=y
# CONFIG_FB_OMAP2_DSS_DSI is not set CONFIG_FB_OMAP2_DSS_MIN_FCK_PER_PCK=0
# CONFIG_FB_OMAP2_DSS_SLEEP_AFTER_VENC_RESET is not set
#
# OMAPFB Panel and Encoder Drivers
#
# CONFIG_FB_OMAP2_ENCODER_OPA362 is not setCONFIG_FB_OMAP2_ENCODER_TFP410=mCONFIG_FB_OMAP2_ENCODER_TPD12S015=mCONFIG_FB_OMAP2_CONNECTOR_DVI=mCONFIG_FB_OMAP2_CONNECTOR_HDMI=mCONFIG_FB_OMAP2_CONNECTOR_ANALOG_TV=mCONFIG_FB_OMAP2_PANEL_DPI=m
# CONFIG_FB_OMAP2_PANEL_DSI_CM is not set
# end of OMAPFB Panel and Encoder Drivers
CONFIG_MMP_DISP=yCONFIG_MMP_DISP_CONTROLLER=y
# CONFIG_MMP_FB is not set
# end of Frame buffer Devices
#
# Backlight & LCD device support
#CONFIG_LCD_CLASS_DEVICE=yCONFIG_LCD_PLATFORM=yCONFIG_BACKLIGHT_CLASS_DEVICE=yCONFIG_BACKLIGHT_ATMEL_LCDC=yCONFIG_BACKLIGHT_KTD253=yCONFIG_BACKLIGHT_LM3533=m
# CONFIG_BACKLIGHT_OMAP1 is not setCONFIG_BACKLIGHT_PWM=mCONFIG_BACKLIGHT_DA9052=mCONFIG_BACKLIGHT_QCOM_WLED=y
# CONFIG_BACKLIGHT_RT4831 is not setCONFIG_BACKLIGHT_ADP8860=mCONFIG_BACKLIGHT_ADP8870=yCONFIG_BACKLIGHT_PCF50633=mCONFIG_BACKLIGHT_LM3630A=mCONFIG_BACKLIGHT_LM3639=yCONFIG_BACKLIGHT_LP855X=yCONFIG_BACKLIGHT_PANDORA=yCONFIG_BACKLIGHT_TPS65217=mCONFIG_BACKLIGHT_GPIO=yCONFIG_BACKLIGHT_LV5207LP=mCONFIG_BACKLIGHT_BD6107=y
# CONFIG_BACKLIGHT_ARCXCNN is not set
# CONFIG_BACKLIGHT_LED is not set
# end of Backlight & LCD device support
CONFIG_VGASTATE=yCONFIG_VIDEOMODE_HELPERS=yCONFIG_HDMI=y
#
# Console display driver support
#CONFIG_DUMMY_CONSOLE=yCONFIG_DUMMY_CONSOLE_COLUMNS=80CONFIG_DUMMY_CONSOLE_ROWS=25
# CONFIG_FRAMEBUFFER_CONSOLE is not set
# end of Console display driver support
# CONFIG_LOGO is not set
# end of Graphics support
CONFIG_SOUND=yCONFIG_SOUND_OSS_CORE=yCONFIG_SOUND_OSS_CORE_PRECLAIM=yCONFIG_SND=mCONFIG_SND_TIMER=mCONFIG_SND_PCM=mCONFIG_SND_PCM_ELD=yCONFIG_SND_PCM_IEC958=yCONFIG_SND_DMAENGINE_PCM=mCONFIG_SND_HWDEP=mCONFIG_SND_SEQ_DEVICE=mCONFIG_SND_RAWMIDI=mCONFIG_SND_COMPRESS_OFFLOAD=mCONFIG_SND_JACK=yCONFIG_SND_JACK_INPUT_DEV=yCONFIG_SND_OSSEMUL=yCONFIG_SND_MIXER_OSS=m
# CONFIG_SND_PCM_OSS is not setCONFIG_SND_PCM_TIMER=y
# CONFIG_SND_HRTIMER is not setCONFIG_SND_DYNAMIC_MINORS=yCONFIG_SND_MAX_CARDS=32CONFIG_SND_SUPPORT_OLD_API=yCONFIG_SND_PROC_FS=y
# CONFIG_SND_VERBOSE_PROCFS is not setCONFIG_SND_VERBOSE_PRINTK=yCONFIG_SND_CTL_FAST_LOOKUP=y
# CONFIG_SND_DEBUG is not set
# CONFIG_SND_CTL_INPUT_VALIDATION is not setCONFIG_SND_VMASTER=yCONFIG_SND_CTL_LED=mCONFIG_SND_SEQUENCER=mCONFIG_SND_SEQ_DUMMY=mCONFIG_SND_SEQUENCER_OSS=mCONFIG_SND_SEQ_MIDI_EVENT=mCONFIG_SND_SEQ_MIDI=mCONFIG_SND_SEQ_MIDI_EMUL=mCONFIG_SND_SEQ_VIRMIDI=mCONFIG_SND_MPU401_UART=mCONFIG_SND_OPL3_LIB=mCONFIG_SND_OPL3_LIB_SEQ=mCONFIG_SND_VX_LIB=mCONFIG_SND_AC97_CODEC=mCONFIG_SND_DRIVERS=y
# CONFIG_SND_DUMMY is not setCONFIG_SND_ALOOP=mCONFIG_SND_VIRMIDI=mCONFIG_SND_MTPAV=mCONFIG_SND_MTS64=mCONFIG_SND_SERIAL_U16550=mCONFIG_SND_MPU401=mCONFIG_SND_PORTMAN2X4=mCONFIG_SND_AC97_POWER_SAVE=yCONFIG_SND_AC97_POWER_SAVE_DEFAULT=0CONFIG_SND_PCI=yCONFIG_SND_AD1889=m
# CONFIG_SND_ALS300 is not set
# CONFIG_SND_ALI5451 is not set
# CONFIG_SND_ATIIXP is not setCONFIG_SND_ATIIXP_MODEM=m
# CONFIG_SND_AU8810 is not set
# CONFIG_SND_AU8820 is not set
# CONFIG_SND_AU8830 is not setCONFIG_SND_AW2=m
# CONFIG_SND_AZT3328 is not set
# CONFIG_SND_BT87X is not setCONFIG_SND_CA0106=mCONFIG_SND_CMIPCI=mCONFIG_SND_OXYGEN_LIB=m
# CONFIG_SND_OXYGEN is not set
# CONFIG_SND_CS4281 is not setCONFIG_SND_CS46XX=mCONFIG_SND_CS46XX_NEW_DSP=y
# CONFIG_SND_CS5535AUDIO is not set
# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
# CONFIG_SND_DARLA24 is not set
# CONFIG_SND_GINA24 is not setCONFIG_SND_LAYLA24=m
# CONFIG_SND_MONA is not set
# CONFIG_SND_MIA is not set
# CONFIG_SND_ECHO3G is not setCONFIG_SND_INDIGO=mCONFIG_SND_INDIGOIO=mCONFIG_SND_INDIGODJ=mCONFIG_SND_INDIGOIOX=mCONFIG_SND_INDIGODJX=m
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not setCONFIG_SND_ENS1370=m
# CONFIG_SND_ENS1371 is not setCONFIG_SND_ES1938=mCONFIG_SND_ES1968=m
# CONFIG_SND_ES1968_INPUT is not setCONFIG_SND_FM801=mCONFIG_SND_HDSP=mCONFIG_SND_HDSPM=m
# CONFIG_SND_ICE1712 is not setCONFIG_SND_ICE1724=mCONFIG_SND_INTEL8X0=mCONFIG_SND_INTEL8X0M=m
# CONFIG_SND_KORG1212 is not setCONFIG_SND_LOLA=mCONFIG_SND_LX6464ES=mCONFIG_SND_MAESTRO3=mCONFIG_SND_MAESTRO3_INPUT=yCONFIG_SND_MIXART=mCONFIG_SND_NM256=mCONFIG_SND_PCXHR=mCONFIG_SND_RIPTIDE=mCONFIG_SND_RME32=m
# CONFIG_SND_RME96 is not setCONFIG_SND_RME9652=m
# CONFIG_SND_SONICVIBES is not set
# CONFIG_SND_TRIDENT is not setCONFIG_SND_VIA82XX=m
# CONFIG_SND_VIA82XX_MODEM is not setCONFIG_SND_VIRTUOSO=mCONFIG_SND_VX222=mCONFIG_SND_YMFPCI=m
#
# HD-Audio
#CONFIG_SND_HDA=mCONFIG_SND_HDA_GENERIC_LEDS=yCONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDA_TEGRA is not setCONFIG_SND_HDA_HWDEP=yCONFIG_SND_HDA_RECONFIG=y
# CONFIG_SND_HDA_INPUT_BEEP is not setCONFIG_SND_HDA_PATCH_LOADER=yCONFIG_SND_HDA_CODEC_REALTEK=mCONFIG_SND_HDA_CODEC_ANALOG=mCONFIG_SND_HDA_CODEC_SIGMATEL=mCONFIG_SND_HDA_CODEC_VIA=m
# CONFIG_SND_HDA_CODEC_HDMI is not setCONFIG_SND_HDA_CODEC_CIRRUS=m
# CONFIG_SND_HDA_CODEC_CS8409 is not set
# CONFIG_SND_HDA_CODEC_CONEXANT is not set
# CONFIG_SND_HDA_CODEC_CA0110 is not setCONFIG_SND_HDA_CODEC_CA0132=mCONFIG_SND_HDA_CODEC_CA0132_DSP=y
# CONFIG_SND_HDA_CODEC_CMEDIA is not setCONFIG_SND_HDA_CODEC_SI3054=mCONFIG_SND_HDA_GENERIC=mCONFIG_SND_HDA_POWER_SAVE_DEFAULT=0CONFIG_SND_HDA_INTEL_HDMI_SILENT_STREAM=y
# end of HD-Audio
CONFIG_SND_HDA_CORE=mCONFIG_SND_HDA_DSP_LOADER=yCONFIG_SND_HDA_COMPONENT=yCONFIG_SND_HDA_EXT_CORE=mCONFIG_SND_HDA_PREALLOC_SIZE=64CONFIG_SND_INTEL_DSP_CONFIG=m
# CONFIG_SND_PCMCIA is not setCONFIG_SND_SOC=mCONFIG_SND_SOC_AC97_BUS=yCONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=yCONFIG_SND_SOC_COMPRESS=yCONFIG_SND_SOC_TOPOLOGY=yCONFIG_SND_SOC_ADI=mCONFIG_SND_SOC_ADI_AXI_I2S=m
# CONFIG_SND_SOC_ADI_AXI_SPDIF is not setCONFIG_SND_SOC_AMD_ACP=mCONFIG_SND_SOC_AMD_CZ_RT5645_MACH=mCONFIG_SND_AMD_ACP_CONFIG=mCONFIG_SND_ATMEL_SOC=mCONFIG_SND_ATMEL_SOC_PDC=yCONFIG_SND_ATMEL_SOC_DMA=yCONFIG_SND_ATMEL_SOC_SSC=mCONFIG_SND_ATMEL_SOC_SSC_PDC=mCONFIG_SND_ATMEL_SOC_SSC_DMA=mCONFIG_SND_AT91_SOC_SAM9G20_WM8731=m
# CONFIG_SND_ATMEL_SOC_WM8904 is not setCONFIG_SND_AT91_SOC_SAM9X5_WM8731=mCONFIG_SND_ATMEL_SOC_CLASSD=mCONFIG_SND_ATMEL_SOC_PDMIC=mCONFIG_SND_ATMEL_SOC_I2S=mCONFIG_SND_SOC_MIKROE_PROTO=m
# CONFIG_SND_MCHP_SOC_I2S_MCC is not setCONFIG_SND_MCHP_SOC_SPDIFTX=mCONFIG_SND_MCHP_SOC_SPDIFRX=mCONFIG_SND_MCHP_SOC_PDMC=mCONFIG_SND_BCM2835_SOC_I2S=mCONFIG_SND_SOC_CYGNUS=mCONFIG_SND_BCM63XX_I2S_WHISTLER=mCONFIG_SND_EP93XX_SOC=m
# CONFIG_SND_DESIGNWARE_I2S is not set
#
# SoC Audio for Freescale CPUs
#
#
# Common SoC Audio options for Freescale CPUs:
#
# CONFIG_SND_SOC_FSL_ASRC is not setCONFIG_SND_SOC_FSL_SAI=m
# CONFIG_SND_SOC_FSL_MQS is not setCONFIG_SND_SOC_FSL_AUDMIX=mCONFIG_SND_SOC_FSL_SSI=mCONFIG_SND_SOC_FSL_SPDIF=mCONFIG_SND_SOC_FSL_ESAI=mCONFIG_SND_SOC_FSL_MICFIL=mCONFIG_SND_SOC_FSL_XCVR=m
# CONFIG_SND_SOC_FSL_AUD2HTX is not setCONFIG_SND_SOC_FSL_UTILS=m
# CONFIG_SND_SOC_FSL_RPMSG is not setCONFIG_SND_SOC_IMX_PCM_DMA=mCONFIG_SND_SOC_IMX_AUDMUX=mCONFIG_SND_IMX_SOC=m
#
# SoC Audio support for Freescale i.MX boards:
#
# CONFIG_SND_SOC_IMX_ES8328 is not setCONFIG_SND_SOC_IMX_SGTL5000=mCONFIG_SND_SOC_IMX_SPDIF=mCONFIG_SND_SOC_FSL_ASOC_CARD=mCONFIG_SND_SOC_IMX_AUDMIX=m
# CONFIG_SND_SOC_IMX_HDMI is not set
# CONFIG_SND_SOC_IMX_RPMSG is not set
# CONFIG_SND_SOC_IMX_CARD is not set
# end of SoC Audio for Freescale CPUs
CONFIG_SND_I2S_HI6210_I2S=m
# CONFIG_SND_JZ4740_SOC_I2S is not set
# CONFIG_SND_KIRKWOOD_SOC is not set
# CONFIG_SND_SOC_IMG is not set
# CONFIG_SND_SOC_INTEL_SST_TOPLEVEL is not set
# CONFIG_SND_SOC_INTEL_KEEMBAY is not setCONFIG_SND_SOC_INTEL_AVS=m
#
# Intel AVS Machine drivers
#
#
# Available DSP configurations
#
# CONFIG_SND_SOC_INTEL_AVS_MACH_DA7219 is not set CONFIG_SND_SOC_INTEL_AVS_MACH_DMIC=m CONFIG_SND_SOC_INTEL_AVS_MACH_HDAUDIO=m CONFIG_SND_SOC_INTEL_AVS_MACH_I2S_TEST=m
# CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98357A is not set # CONFIG_SND_SOC_INTEL_AVS_MACH_MAX98373 is not set CONFIG_SND_SOC_INTEL_AVS_MACH_NAU8825=m CONFIG_SND_SOC_INTEL_AVS_MACH_RT274=m CONFIG_SND_SOC_INTEL_AVS_MACH_RT286=m CONFIG_SND_SOC_INTEL_AVS_MACH_RT298=m CONFIG_SND_SOC_INTEL_AVS_MACH_RT5682=m CONFIG_SND_SOC_INTEL_AVS_MACH_SSM4567=m
# end of Intel AVS Machine drivers
CONFIG_SND_SOC_MEDIATEK=m
# CONFIG_SND_SOC_MT2701 is not set CONFIG_SND_SOC_MT6797=m CONFIG_SND_SOC_MT6797_MT6351=m CONFIG_SND_SOC_MT8173=m CONFIG_SND_SOC_MT8173_MAX98090=m CONFIG_SND_SOC_MT8173_RT5650=m CONFIG_SND_SOC_MT8173_RT5650_RT5514=m CONFIG_SND_SOC_MT8173_RT5650_RT5676=m
# CONFIG_SND_SOC_MT8183 is not set CONFIG_SND_SOC_MT8186=m CONFIG_SND_SOC_MT8186_MT6366_DA7219_MAX98357=m CONFIG_SND_SOC_MT8186_MT6366_RT1019_RT5682S=m CONFIG_SND_SOC_MTK_BTCVSD=m CONFIG_SND_SOC_MT8192=m
# CONFIG_SND_SOC_MT8192_MT6359_RT1015_RT5682 is not set CONFIG_SND_SOC_MT8195=m
# CONFIG_SND_SOC_MT8195_MT6359 is not set
#
# ASoC support for Amlogic platforms
#CONFIG_SND_MESON_AIU=mCONFIG_SND_MESON_AXG_FIFO=mCONFIG_SND_MESON_AXG_FRDDR=mCONFIG_SND_MESON_AXG_TODDR=mCONFIG_SND_MESON_AXG_TDM_FORMATTER=mCONFIG_SND_MESON_AXG_TDM_INTERFACE=m
# CONFIG_SND_MESON_AXG_TDMIN is not set
# CONFIG_SND_MESON_AXG_TDMOUT is not setCONFIG_SND_MESON_AXG_SOUND_CARD=mCONFIG_SND_MESON_AXG_SPDIFOUT=mCONFIG_SND_MESON_AXG_SPDIFIN=m
# CONFIG_SND_MESON_AXG_PDM is not setCONFIG_SND_MESON_CARD_UTILS=mCONFIG_SND_MESON_CODEC_GLUE=mCONFIG_SND_MESON_GX_SOUND_CARD=m
# CONFIG_SND_MESON_G12A_TOACODEC is not set
# CONFIG_SND_MESON_G12A_TOHDMITX is not setCONFIG_SND_SOC_MESON_T9015=m
# end of ASoC support for Amlogic platforms
CONFIG_SND_MXS_SOC=m CONFIG_SND_SOC_MXS_SGTL5000=m
# CONFIG_SND_PXA2XX_SOC is not set CONFIG_SND_SOC_QCOM=m CONFIG_SND_SOC_LPASS_CPU=m CONFIG_SND_SOC_LPASS_HDMI=m CONFIG_SND_SOC_LPASS_PLATFORM=m CONFIG_SND_SOC_LPASS_CDC_DMA=m CONFIG_SND_SOC_LPASS_IPQ806X=m CONFIG_SND_SOC_LPASS_APQ8016=m CONFIG_SND_SOC_LPASS_SC7280=m CONFIG_SND_SOC_STORM=m CONFIG_SND_SOC_APQ8016_SBC=m CONFIG_SND_SOC_QCOM_COMMON=m
# CONFIG_SND_SOC_SC7180 is not set CONFIG_SND_SOC_SC7280=m CONFIG_SND_SOC_ROCKCHIP=m CONFIG_SND_SOC_ROCKCHIP_I2S=m CONFIG_SND_SOC_ROCKCHIP_I2S_TDM=m
# CONFIG_SND_SOC_ROCKCHIP_PDM is not set
# CONFIG_SND_SOC_ROCKCHIP_SPDIF is not set # CONFIG_SND_SOC_ROCKCHIP_MAX98090 is not set CONFIG_SND_SOC_ROCKCHIP_RT5645=m CONFIG_SND_SOC_RK3288_HDMI_ANALOG=m CONFIG_SND_SOC_SAMSUNG=m CONFIG_SND_S3C24XX_I2S=m CONFIG_SND_SAMSUNG_PCM=m CONFIG_SND_SAMSUNG_SPDIF=m CONFIG_SND_SAMSUNG_I2S=m
# CONFIG_SND_SOC_SAMSUNG_NEO1973_WM8753 is not set # CONFIG_SND_SOC_SAMSUNG_SMDK_WM8580 is not set # CONFIG_SND_SOC_SAMSUNG_SMDK_WM8994 is not set # CONFIG_SND_SOC_SAMSUNG_S3C24XX_UDA134X is not set CONFIG_SND_SOC_SAMSUNG_SIMTEC=m CONFIG_SND_SOC_SAMSUNG_SIMTEC_TLV320AIC23=m CONFIG_SND_SOC_SAMSUNG_SIMTEC_HERMES=m CONFIG_SND_SOC_SAMSUNG_H1940_UDA1380=m CONFIG_SND_SOC_SAMSUNG_RX1950_UDA1380=m CONFIG_SND_SOC_SMARTQ=m
# CONFIG_SND_SOC_SAMSUNG_SMDK_SPDIF is not set # CONFIG_SND_SOC_SMDK_WM8994_PCM is not set CONFIG_SND_SOC_TOBERMORY=m CONFIG_SND_SOC_LOWLAND=m
# CONFIG_SND_SOC_LITTLEMILL is not set CONFIG_SND_SOC_SNOW=m CONFIG_SND_SOC_ODROID=m
# CONFIG_SND_SOC_ARNDALE is not set
# CONFIG_SND_SOC_SAMSUNG_ARIES_WM8994 is not set CONFIG_SND_SOC_SAMSUNG_MIDAS_WM1811=m
#
# SoC Audio support for Renesas SoCs
#CONFIG_SND_SOC_SH4_FSI=mCONFIG_SND_SOC_RCAR=m
# CONFIG_SND_SOC_RZ is not set
# end of SoC Audio support for Renesas SoCs
# CONFIG_SND_SOC_SOF_TOPLEVEL is not setCONFIG_SND_SOC_SPRD=mCONFIG_SND_SOC_SPRD_MCDT=mCONFIG_SND_SOC_STI=m
#
# STMicroelectronics STM32 SOC audio support
#
# CONFIG_SND_SOC_STM32_SAI is not setCONFIG_SND_SOC_STM32_I2S=mCONFIG_SND_SOC_STM32_SPDIFRX=m
# CONFIG_SND_SOC_STM32_DFSDM is not set
# end of STMicroelectronics STM32 SOC audio support
#
# Allwinner SoC Audio support
#CONFIG_SND_SUN4I_CODEC=m
# CONFIG_SND_SUN8I_CODEC is not setCONFIG_SND_SUN8I_CODEC_ANALOG=m
# CONFIG_SND_SUN50I_CODEC_ANALOG is not set
# CONFIG_SND_SUN4I_I2S is not set
# CONFIG_SND_SUN4I_SPDIF is not setCONFIG_SND_SUN8I_ADDA_PR_REGMAP=m
# end of Allwinner SoC Audio support
# CONFIG_SND_SOC_TEGRA is not set
#
# Audio support for Texas Instruments SoCs
#CONFIG_SND_SOC_TI_EDMA_PCM=mCONFIG_SND_SOC_TI_SDMA_PCM=mCONFIG_SND_SOC_TI_UDMA_PCM=m
#
# Texas Instruments DAI support for:
#CONFIG_SND_SOC_DAVINCI_ASP=mCONFIG_SND_SOC_DAVINCI_MCASP=m
# CONFIG_SND_SOC_DAVINCI_VCIF is not set
# CONFIG_SND_SOC_OMAP_DMIC is not setCONFIG_SND_SOC_OMAP_MCBSP=m
# CONFIG_SND_SOC_OMAP_MCPDM is not set
#
# Audio support for boards with Texas Instruments SoCs #CONFIG_SND_SOC_OMAP3_TWL4030=m
# CONFIG_SND_SOC_OMAP_HDMI is not set
# CONFIG_SND_SOC_J721E_EVM is not set
# end of Audio support for Texas Instruments SoCs
CONFIG_SND_SOC_UNIPHIER=m
# CONFIG_SND_SOC_UNIPHIER_AIO is not set
# CONFIG_SND_SOC_UNIPHIER_LD11 is not set
# CONFIG_SND_SOC_UNIPHIER_PXS2 is not set
# CONFIG_SND_SOC_UNIPHIER_EVEA_CODEC is not setCONFIG_SND_SOC_XILINX_I2S=mCONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=m
# CONFIG_SND_SOC_XILINX_SPDIF is not setCONFIG_SND_SOC_XTFPGA_I2S=mCONFIG_SND_SOC_I2C_AND_SPI=m
#
# CODEC drivers
#CONFIG_SND_SOC_ALL_CODECS=m
# CONFIG_SND_SOC_88PM860X is not setCONFIG_SND_SOC_ARIZONA=mCONFIG_SND_SOC_WM_HUBS=mCONFIG_SND_SOC_WM_ADSP=m
# CONFIG_SND_SOC_AB8500_CODEC is not setCONFIG_SND_SOC_AC97_CODEC=m
# CONFIG_SND_SOC_AD1836 is not setCONFIG_SND_SOC_AD193X=m
# CONFIG_SND_SOC_AD193X_SPI is not setCONFIG_SND_SOC_AD193X_I2C=mCONFIG_SND_SOC_AD1980=mCONFIG_SND_SOC_AD73311=mCONFIG_SND_SOC_ADAU_UTILS=m
# CONFIG_SND_SOC_ADAU1372_I2C is not set
# CONFIG_SND_SOC_ADAU1372_SPI is not setCONFIG_SND_SOC_ADAU1373=m
# CONFIG_SND_SOC_ADAU1701 is not setCONFIG_SND_SOC_ADAU17X1=mCONFIG_SND_SOC_ADAU1761=mCONFIG_SND_SOC_ADAU1761_I2C=m
# CONFIG_SND_SOC_ADAU1761_SPI is not setCONFIG_SND_SOC_ADAU1781=mCONFIG_SND_SOC_ADAU1781_I2C=m
# CONFIG_SND_SOC_ADAU1781_SPI is not setCONFIG_SND_SOC_ADAU1977=m
# CONFIG_SND_SOC_ADAU1977_SPI is not setCONFIG_SND_SOC_ADAU1977_I2C=mCONFIG_SND_SOC_ADAU7002=mCONFIG_SND_SOC_ADAU7118=mCONFIG_SND_SOC_ADAU7118_HW=m
# CONFIG_SND_SOC_ADAU7118_I2C is not setCONFIG_SND_SOC_ADAV80X=m
# CONFIG_SND_SOC_ADAV801 is not setCONFIG_SND_SOC_ADAV803=mCONFIG_SND_SOC_ADS117X=m
# CONFIG_SND_SOC_AK4104 is not setCONFIG_SND_SOC_AK4118=m
# CONFIG_SND_SOC_AK4375 is not setCONFIG_SND_SOC_AK4458=mCONFIG_SND_SOC_AK4535=mCONFIG_SND_SOC_AK4554=m
# CONFIG_SND_SOC_AK4613 is not setCONFIG_SND_SOC_AK4641=m
# CONFIG_SND_SOC_AK4642 is not setCONFIG_SND_SOC_AK4671=mCONFIG_SND_SOC_AK5386=m
# CONFIG_SND_SOC_AK5558 is not set
# CONFIG_SND_SOC_ALC5623 is not setCONFIG_SND_SOC_ALC5632=m
# CONFIG_SND_SOC_AW8738 is not set
# CONFIG_SND_SOC_BD28623 is not setCONFIG_SND_SOC_BT_SCO=mCONFIG_SND_SOC_CQ0093VC=mCONFIG_SND_SOC_CROS_EC_CODEC=mCONFIG_SND_SOC_CS35L32=mCONFIG_SND_SOC_CS35L33=mCONFIG_SND_SOC_CS35L34=m
# CONFIG_SND_SOC_CS35L35 is not set
# CONFIG_SND_SOC_CS35L36 is not set
# CONFIG_SND_SOC_CS35L41_SPI is not set
# CONFIG_SND_SOC_CS35L41_I2C is not setCONFIG_SND_SOC_CS35L45_TABLES=mCONFIG_SND_SOC_CS35L45=m
# CONFIG_SND_SOC_CS35L45_SPI is not setCONFIG_SND_SOC_CS35L45_I2C=mCONFIG_SND_SOC_CS42L42=mCONFIG_SND_SOC_CS42L51=mCONFIG_SND_SOC_CS42L51_I2C=mCONFIG_SND_SOC_CS42L52=m
# CONFIG_SND_SOC_CS42L56 is not setCONFIG_SND_SOC_CS42L73=mCONFIG_SND_SOC_CS4234=mCONFIG_SND_SOC_CS4265=mCONFIG_SND_SOC_CS4270=m
# CONFIG_SND_SOC_CS4271_I2C is not set
# CONFIG_SND_SOC_CS4271_SPI is not set
# CONFIG_SND_SOC_CS42XX8_I2C is not setCONFIG_SND_SOC_CS43130=mCONFIG_SND_SOC_CS4341=mCONFIG_SND_SOC_CS4349=m
# CONFIG_SND_SOC_CS47L15 is not setCONFIG_SND_SOC_CS47L24=m
# CONFIG_SND_SOC_CS47L35 is not setCONFIG_SND_SOC_CS47L85=m
# CONFIG_SND_SOC_CS47L90 is not setCONFIG_SND_SOC_CS47L92=mCONFIG_SND_SOC_CS53L30=mCONFIG_SND_SOC_CX20442=mCONFIG_SND_SOC_CX2072X=mCONFIG_SND_SOC_JZ4740_CODEC=mCONFIG_SND_SOC_JZ4725B_CODEC=m
# CONFIG_SND_SOC_JZ4760_CODEC is not set
# CONFIG_SND_SOC_JZ4770_CODEC is not setCONFIG_SND_SOC_L3=mCONFIG_SND_SOC_DA7210=mCONFIG_SND_SOC_DA7213=mCONFIG_SND_SOC_DA7218=mCONFIG_SND_SOC_DA7219=mCONFIG_SND_SOC_DA732X=mCONFIG_SND_SOC_DA9055=mCONFIG_SND_SOC_DMIC=mCONFIG_SND_SOC_HDMI_CODEC=mCONFIG_SND_SOC_ES7134=mCONFIG_SND_SOC_ES7241=mCONFIG_SND_SOC_ES8316=mCONFIG_SND_SOC_ES8328=mCONFIG_SND_SOC_ES8328_I2C=m
# CONFIG_SND_SOC_ES8328_SPI is not set
# CONFIG_SND_SOC_GTM601 is not setCONFIG_SND_SOC_HDAC_HDMI=mCONFIG_SND_SOC_HDAC_HDA=mCONFIG_SND_SOC_HDA=mCONFIG_SND_SOC_ICS43432=m
# CONFIG_SND_SOC_INNO_RK3036 is not setCONFIG_SND_SOC_ISABELLE=mCONFIG_SND_SOC_LM49453=m
# CONFIG_SND_SOC_LOCHNAGAR_SC is not setCONFIG_SND_SOC_MADERA=mCONFIG_SND_SOC_MAX98088=mCONFIG_SND_SOC_MAX98090=mCONFIG_SND_SOC_MAX98095=mCONFIG_SND_SOC_MAX98357A=mCONFIG_SND_SOC_MAX98371=mCONFIG_SND_SOC_MAX98504=mCONFIG_SND_SOC_MAX9867=mCONFIG_SND_SOC_MAX98925=mCONFIG_SND_SOC_MAX98926=m
# CONFIG_SND_SOC_MAX98927 is not set
# CONFIG_SND_SOC_MAX98520 is not setCONFIG_SND_SOC_MAX98373=mCONFIG_SND_SOC_MAX98373_I2C=m
# CONFIG_SND_SOC_MAX98373_SDW is not set
# CONFIG_SND_SOC_MAX98390 is not set
# CONFIG_SND_SOC_MAX98396 is not setCONFIG_SND_SOC_MAX9850=mCONFIG_SND_SOC_MAX9860=m
# CONFIG_SND_SOC_MSM8916_WCD_ANALOG is not set
# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set
# CONFIG_SND_SOC_PCM1681 is not set
# CONFIG_SND_SOC_PCM1789_I2C is not set
# CONFIG_SND_SOC_PCM179X_I2C is not set
# CONFIG_SND_SOC_PCM179X_SPI is not setCONFIG_SND_SOC_PCM186X=mCONFIG_SND_SOC_PCM186X_I2C=m
# CONFIG_SND_SOC_PCM186X_SPI is not setCONFIG_SND_SOC_PCM3008=mCONFIG_SND_SOC_PCM3060=mCONFIG_SND_SOC_PCM3060_I2C=m
# CONFIG_SND_SOC_PCM3060_SPI is not set
# CONFIG_SND_SOC_PCM3168A_I2C is not set
# CONFIG_SND_SOC_PCM3168A_SPI is not setCONFIG_SND_SOC_PCM5102A=m
CONFIG_SND_SOC_PCM512x=m
CONFIG_SND_SOC_PCM512x_I2C=m
# CONFIG_SND_SOC_PCM512x_SPI is not set
# CONFIG_SND_SOC_RK3328 is not setCONFIG_SND_SOC_RK817=mCONFIG_SND_SOC_RL6231=mCONFIG_SND_SOC_RL6347A=mCONFIG_SND_SOC_RT274=mCONFIG_SND_SOC_RT286=mCONFIG_SND_SOC_RT298=mCONFIG_SND_SOC_RT1011=mCONFIG_SND_SOC_RT1015=mCONFIG_SND_SOC_RT1015P=mCONFIG_SND_SOC_RT1016=mCONFIG_SND_SOC_RT1019=mCONFIG_SND_SOC_RT1305=mCONFIG_SND_SOC_RT1308=mCONFIG_SND_SOC_RT1308_SDW=mCONFIG_SND_SOC_RT1316_SDW=mCONFIG_SND_SOC_RT5514=mCONFIG_SND_SOC_RT5616=m
# CONFIG_SND_SOC_RT5631 is not setCONFIG_SND_SOC_RT5640=mCONFIG_SND_SOC_RT5645=mCONFIG_SND_SOC_RT5651=mCONFIG_SND_SOC_RT5659=mCONFIG_SND_SOC_RT5660=mCONFIG_SND_SOC_RT5663=mCONFIG_SND_SOC_RT5665=mCONFIG_SND_SOC_RT5668=mCONFIG_SND_SOC_RT5670=mCONFIG_SND_SOC_RT5677=mCONFIG_SND_SOC_RT5682=mCONFIG_SND_SOC_RT5682_I2C=mCONFIG_SND_SOC_RT5682_SDW=mCONFIG_SND_SOC_RT5682S=mCONFIG_SND_SOC_RT700=mCONFIG_SND_SOC_RT700_SDW=m
# CONFIG_SND_SOC_RT711_SDW is not setCONFIG_SND_SOC_RT711_SDCA_SDW=mCONFIG_SND_SOC_RT715=mCONFIG_SND_SOC_RT715_SDW=mCONFIG_SND_SOC_RT715_SDCA_SDW=mCONFIG_SND_SOC_RT9120=m
# CONFIG_SND_SOC_SDW_MOCKUP is not setCONFIG_SND_SOC_SGTL5000=mCONFIG_SND_SOC_SI476X=mCONFIG_SND_SOC_SIGMADSP=mCONFIG_SND_SOC_SIGMADSP_REGMAP=m
# CONFIG_SND_SOC_SIMPLE_AMPLIFIER is not setCONFIG_SND_SOC_SIMPLE_MUX=mCONFIG_SND_SOC_SPDIF=m
# CONFIG_SND_SOC_SSM2305 is not set
# CONFIG_SND_SOC_SSM2518 is not set
# CONFIG_SND_SOC_SSM2602_SPI is not set
# CONFIG_SND_SOC_SSM2602_I2C is not setCONFIG_SND_SOC_SSM4567=m
# CONFIG_SND_SOC_STA32X is not setCONFIG_SND_SOC_STA350=mCONFIG_SND_SOC_STA529=mCONFIG_SND_SOC_STAC9766=mCONFIG_SND_SOC_STI_SAS=m
# CONFIG_SND_SOC_TAS2552 is not setCONFIG_SND_SOC_TAS2562=mCONFIG_SND_SOC_TAS2764=mCONFIG_SND_SOC_TAS2770=m
# CONFIG_SND_SOC_TAS2780 is not setCONFIG_SND_SOC_TAS5086=mCONFIG_SND_SOC_TAS571X=mCONFIG_SND_SOC_TAS5720=m
# CONFIG_SND_SOC_TAS5805M is not set
# CONFIG_SND_SOC_TAS6424 is not setCONFIG_SND_SOC_TDA7419=m
# CONFIG_SND_SOC_TFA9879 is not setCONFIG_SND_SOC_TFA989X=mCONFIG_SND_SOC_TLV320ADC3XXX=mCONFIG_SND_SOC_TLV320AIC23=mCONFIG_SND_SOC_TLV320AIC23_I2C=m
# CONFIG_SND_SOC_TLV320AIC23_SPI is not set
# CONFIG_SND_SOC_TLV320AIC26 is not setCONFIG_SND_SOC_TLV320AIC31XX=m
# CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set
# CONFIG_SND_SOC_TLV320AIC32X4_SPI is not setCONFIG_SND_SOC_TLV320AIC3X=m
# CONFIG_SND_SOC_TLV320AIC3X_I2C is not set
# CONFIG_SND_SOC_TLV320AIC3X_SPI is not setCONFIG_SND_SOC_TLV320DAC33=m
# CONFIG_SND_SOC_TLV320ADCX140 is not setCONFIG_SND_SOC_TS3A227E=mCONFIG_SND_SOC_TSCS42XX=m
# CONFIG_SND_SOC_TSCS454 is not setCONFIG_SND_SOC_TWL4030=m
# CONFIG_SND_SOC_TWL6040 is not setCONFIG_SND_SOC_UDA1334=mCONFIG_SND_SOC_UDA134X=mCONFIG_SND_SOC_UDA1380=m
# CONFIG_SND_SOC_WCD9335 is not setCONFIG_SND_SOC_WCD_MBHC=m
# CONFIG_SND_SOC_WCD934X is not setCONFIG_SND_SOC_WCD938X=mCONFIG_SND_SOC_WCD938X_SDW=mCONFIG_SND_SOC_WL1273=m
# CONFIG_SND_SOC_WM0010 is not setCONFIG_SND_SOC_WM1250_EV1=mCONFIG_SND_SOC_WM2000=mCONFIG_SND_SOC_WM2200=mCONFIG_SND_SOC_WM5100=mCONFIG_SND_SOC_WM5102=m
# CONFIG_SND_SOC_WM5110 is not set
# CONFIG_SND_SOC_WM8350 is not set
# CONFIG_SND_SOC_WM8400 is not setCONFIG_SND_SOC_WM8510=mCONFIG_SND_SOC_WM8523=mCONFIG_SND_SOC_WM8524=mCONFIG_SND_SOC_WM8580=mCONFIG_SND_SOC_WM8711=mCONFIG_SND_SOC_WM8727=mCONFIG_SND_SOC_WM8728=mCONFIG_SND_SOC_WM8731=mCONFIG_SND_SOC_WM8731_I2C=m
# CONFIG_SND_SOC_WM8731_SPI is not setCONFIG_SND_SOC_WM8737=m
# CONFIG_SND_SOC_WM8741 is not setCONFIG_SND_SOC_WM8750=mCONFIG_SND_SOC_WM8753=m
# CONFIG_SND_SOC_WM8770 is not setCONFIG_SND_SOC_WM8776=mCONFIG_SND_SOC_WM8782=m
# CONFIG_SND_SOC_WM8804_I2C is not set
# CONFIG_SND_SOC_WM8804_SPI is not setCONFIG_SND_SOC_WM8900=mCONFIG_SND_SOC_WM8903=m
# CONFIG_SND_SOC_WM8904 is not setCONFIG_SND_SOC_WM8940=mCONFIG_SND_SOC_WM8955=mCONFIG_SND_SOC_WM8960=mCONFIG_SND_SOC_WM8961=mCONFIG_SND_SOC_WM8962=mCONFIG_SND_SOC_WM8971=mCONFIG_SND_SOC_WM8974=mCONFIG_SND_SOC_WM8978=mCONFIG_SND_SOC_WM8983=mCONFIG_SND_SOC_WM8985=mCONFIG_SND_SOC_WM8988=mCONFIG_SND_SOC_WM8990=mCONFIG_SND_SOC_WM8991=mCONFIG_SND_SOC_WM8993=mCONFIG_SND_SOC_WM8994=mCONFIG_SND_SOC_WM8995=mCONFIG_SND_SOC_WM8996=mCONFIG_SND_SOC_WM8997=mCONFIG_SND_SOC_WM8998=mCONFIG_SND_SOC_WM9081=mCONFIG_SND_SOC_WM9090=mCONFIG_SND_SOC_WM9705=mCONFIG_SND_SOC_WM9712=mCONFIG_SND_SOC_WM9713=mCONFIG_SND_SOC_WSA881X=m
# CONFIG_SND_SOC_WSA883X is not set
# CONFIG_SND_SOC_ZL38060 is not setCONFIG_SND_SOC_LM4857=mCONFIG_SND_SOC_MAX9759=mCONFIG_SND_SOC_MAX9768=mCONFIG_SND_SOC_MAX9877=mCONFIG_SND_SOC_MC13783=mCONFIG_SND_SOC_ML26124=mCONFIG_SND_SOC_MT6351=mCONFIG_SND_SOC_MT6358=mCONFIG_SND_SOC_MT6359=mCONFIG_SND_SOC_MT6359_ACCDET=mCONFIG_SND_SOC_MT6660=mCONFIG_SND_SOC_NAU8315=mCONFIG_SND_SOC_NAU8540=m
# CONFIG_SND_SOC_NAU8810 is not setCONFIG_SND_SOC_NAU8821=m
# CONFIG_SND_SOC_NAU8822 is not setCONFIG_SND_SOC_NAU8824=mCONFIG_SND_SOC_NAU8825=m
# CONFIG_SND_SOC_TPA6130A2 is not setCONFIG_SND_SOC_LPASS_MACRO_COMMON=m
# CONFIG_SND_SOC_LPASS_WSA_MACRO is not setCONFIG_SND_SOC_LPASS_VA_MACRO=mCONFIG_SND_SOC_LPASS_RX_MACRO=m
# CONFIG_SND_SOC_LPASS_TX_MACRO is not set
# end of CODEC drivers
CONFIG_SND_SIMPLE_CARD_UTILS=mCONFIG_SND_SIMPLE_CARD=m
# CONFIG_SND_AUDIO_GRAPH_CARD is not setCONFIG_SND_AUDIO_GRAPH_CARD2=mCONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=mCONFIG_SND_TEST_COMPONENT=mCONFIG_SND_XEN_FRONTEND=m
# CONFIG_SND_VIRTIO is not setCONFIG_AC97_BUS=m
#
# HID support
#CONFIG_HID=y
# CONFIG_HID_BATTERY_STRENGTH is not setCONFIG_HIDRAW=yCONFIG_UHID=mCONFIG_HID_GENERIC=m
#
# Special HID drivers
#CONFIG_HID_A4TECH=mCONFIG_HID_ACRUX=yCONFIG_HID_ACRUX_FF=yCONFIG_HID_APPLE=y
# CONFIG_HID_AUREAL is not setCONFIG_HID_BELKIN=mCONFIG_HID_CHERRY=y
# CONFIG_HID_COUGAR is not setCONFIG_HID_MACALLY=y
# CONFIG_HID_CMEDIA is not setCONFIG_HID_CYPRESS=m
# CONFIG_HID_DRAGONRISE is not set
# CONFIG_HID_EMS_FF is not setCONFIG_HID_ELECOM=yCONFIG_HID_EZKEY=y
# CONFIG_HID_GEMBIRD is not set
# CONFIG_HID_GFRM is not setCONFIG_HID_GLORIOUS=mCONFIG_HID_VIVALDI_COMMON=mCONFIG_HID_VIVALDI=mCONFIG_HID_KEYTOUCH=y
# CONFIG_HID_KYE is not setCONFIG_HID_WALTOP=m
# CONFIG_HID_VIEWSONIC is not setCONFIG_HID_XIAOMI=m
# CONFIG_HID_GYRATION is not setCONFIG_HID_ICADE=y
# CONFIG_HID_ITE is not setCONFIG_HID_JABRA=mCONFIG_HID_TWINHAN=m
# CONFIG_HID_KENSINGTON is not setCONFIG_HID_LCPOWER=yCONFIG_HID_LED=mCONFIG_HID_LENOVO=mCONFIG_HID_MAGICMOUSE=mCONFIG_HID_MALTRON=mCONFIG_HID_MAYFLASH=yCONFIG_HID_REDRAGON=m
# CONFIG_HID_MICROSOFT is not setCONFIG_HID_MONTEREY=yCONFIG_HID_MULTITOUCH=mCONFIG_HID_NINTENDO=y
# CONFIG_NINTENDO_FF is not setCONFIG_HID_NTI=y
# CONFIG_HID_ORTEK is not setCONFIG_HID_PANTHERLORD=yCONFIG_PANTHERLORD_FF=yCONFIG_HID_PETALYNX=mCONFIG_HID_PICOLCD=yCONFIG_HID_PICOLCD_FB=yCONFIG_HID_PICOLCD_BACKLIGHT=yCONFIG_HID_PICOLCD_LCD=yCONFIG_HID_PICOLCD_LEDS=yCONFIG_HID_PLANTRONICS=mCONFIG_HID_PLAYSTATION=m
# CONFIG_PLAYSTATION_FF is not set
# CONFIG_HID_RAZER is not set
# CONFIG_HID_PRIMAX is not setCONFIG_HID_SAITEK=mCONFIG_HID_SEMITEK=mCONFIG_HID_SPEEDLINK=m
# CONFIG_HID_STEAM is not setCONFIG_HID_STEELSERIES=m
# CONFIG_HID_SUNPLUS is not setCONFIG_HID_RMI=yCONFIG_HID_GREENASIA=yCONFIG_GREENASIA_FF=yCONFIG_HID_SMARTJOYPLUS=m
# CONFIG_SMARTJOYPLUS_FF is not set
# CONFIG_HID_TIVO is not setCONFIG_HID_TOPSEED=y
# CONFIG_HID_THINGM is not set
# CONFIG_HID_UDRAW_PS3 is not set
# CONFIG_HID_WIIMOTE is not setCONFIG_HID_XINMO=yCONFIG_HID_ZEROPLUS=mCONFIG_ZEROPLUS_FF=yCONFIG_HID_ZYDACRON=yCONFIG_HID_SENSOR_HUB=mCONFIG_HID_SENSOR_CUSTOM_SENSOR=mCONFIG_HID_ALPS=m
# end of Special HID drivers
#
# I2C HID support
#CONFIG_I2C_HID_OF=yCONFIG_I2C_HID_OF_ELAN=mCONFIG_I2C_HID_OF_GOODIX=m
# end of I2C HID support
CONFIG_I2C_HID_CORE=y
#
# Intel ISH HID support
#
# end of Intel ISH HID support
#
# AMD SFH HID Support
#CONFIG_AMD_SFH_HID=m
# end of AMD SFH HID Support # end of HID support
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_SUPPORT is not set
# CONFIG_MMC is not setCONFIG_MEMSTICK=y
# CONFIG_MEMSTICK_DEBUG is not set
#
# MemoryStick drivers
#CONFIG_MEMSTICK_UNSAFE_RESUME=y
# CONFIG_MSPRO_BLOCK is not set
# CONFIG_MS_BLOCK is not set
#
# MemoryStick Host Controller Drivers
#CONFIG_MEMSTICK_TIFM_MS=mCONFIG_MEMSTICK_JMICRON_38X=mCONFIG_MEMSTICK_R592=mCONFIG_MEMSTICK_REALTEK_PCI=mCONFIG_NEW_LEDS=yCONFIG_LEDS_CLASS=yCONFIG_LEDS_CLASS_FLASH=mCONFIG_LEDS_CLASS_MULTICOLOR=y
# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set
#
# LED drivers
#CONFIG_LEDS_AN30259A=yCONFIG_LEDS_ARIEL=yCONFIG_LEDS_AW2013=m
# CONFIG_LEDS_BCM6328 is not set
# CONFIG_LEDS_BCM6358 is not setCONFIG_LEDS_TURRIS_OMNIA=yCONFIG_LEDS_LM3530=mCONFIG_LEDS_LM3532=mCONFIG_LEDS_LM3533=m
# CONFIG_LEDS_LM3642 is not setCONFIG_LEDS_LM3692X=y
# CONFIG_LEDS_MT6323 is not setCONFIG_LEDS_S3C24XX=m
# CONFIG_LEDS_COBALT_QUBE is not setCONFIG_LEDS_COBALT_RAQ=yCONFIG_LEDS_PCA9532=y
# CONFIG_LEDS_PCA9532_GPIO is not setCONFIG_LEDS_GPIO=m
# CONFIG_LEDS_LP3944 is not setCONFIG_LEDS_LP3952=mCONFIG_LEDS_LP50XX=yCONFIG_LEDS_LP55XX_COMMON=y
# CONFIG_LEDS_LP5521 is not set
# CONFIG_LEDS_LP5523 is not setCONFIG_LEDS_LP5562=m
# CONFIG_LEDS_LP8501 is not setCONFIG_LEDS_LP8860=m
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_PCA963X is not setCONFIG_LEDS_DA9052=mCONFIG_LEDS_PWM=yCONFIG_LEDS_REGULATOR=mCONFIG_LEDS_BD2802=yCONFIG_LEDS_LT3593=yCONFIG_LEDS_MC13783=mCONFIG_LEDS_NS2=m
# CONFIG_LEDS_NETXBIG is not setCONFIG_LEDS_ASIC3=yCONFIG_LEDS_TCA6507=yCONFIG_LEDS_TLC591XX=m
# CONFIG_LEDS_MAX77650 is not set
# CONFIG_LEDS_LM355x is not setCONFIG_LEDS_OT200=mCONFIG_LEDS_MENF21BMC=mCONFIG_LEDS_IS31FL319X=mCONFIG_LEDS_IS31FL32XX=m
#
# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) #CONFIG_LEDS_BLINKM=yCONFIG_LEDS_SYSCON=yCONFIG_LEDS_PM8058=yCONFIG_LEDS_MLXREG=yCONFIG_LEDS_USER=y
# CONFIG_LEDS_TI_LMU_COMMON is not setCONFIG_LEDS_TPS6105X=m
# CONFIG_LEDS_IP30 is not setCONFIG_LEDS_BCM63138=yCONFIG_LEDS_LGM=y
#
# Flash and Torch LED drivers
#
# CONFIG_LEDS_AAT1290 is not set
# CONFIG_LEDS_AS3645A is not set
# CONFIG_LEDS_KTD2692 is not set
# CONFIG_LEDS_LM3601X is not setCONFIG_LEDS_RT4505=mCONFIG_LEDS_RT8515=mCONFIG_LEDS_SGM3140=m
#
# RGB LED drivers
#CONFIG_LEDS_PWM_MULTICOLOR=yCONFIG_LEDS_QCOM_LPG=m
#
# LED Triggers
#CONFIG_LEDS_TRIGGERS=yCONFIG_LEDS_TRIGGER_TIMER=mCONFIG_LEDS_TRIGGER_ONESHOT=yCONFIG_LEDS_TRIGGER_MTD=y
# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
# CONFIG_LEDS_TRIGGER_BACKLIGHT is not setCONFIG_LEDS_TRIGGER_CPU=yCONFIG_LEDS_TRIGGER_ACTIVITY=mCONFIG_LEDS_TRIGGER_GPIO=m
# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
#
# iptables trigger is under Netfilter config (LED target) # CONFIG_LEDS_TRIGGER_TRANSIENT=m CONFIG_LEDS_TRIGGER_CAMERA=m CONFIG_LEDS_TRIGGER_PANIC=y CONFIG_LEDS_TRIGGER_PATTERN=y CONFIG_LEDS_TRIGGER_AUDIO=y CONFIG_LEDS_TRIGGER_TTY=m
#
# Simple LED drivers
#CONFIG_ACCESSIBILITY=yCONFIG_A11Y_BRAILLE_CONSOLE=y
#
# Speakup console speech
#CONFIG_SPEAKUP=mCONFIG_SPEAKUP_SERIALIO=yCONFIG_SPEAKUP_SYNTH_ACNTSA=mCONFIG_SPEAKUP_SYNTH_ACNTPC=mCONFIG_SPEAKUP_SYNTH_APOLLO=mCONFIG_SPEAKUP_SYNTH_AUDPTR=mCONFIG_SPEAKUP_SYNTH_BNS=mCONFIG_SPEAKUP_SYNTH_DECTLK=m
# CONFIG_SPEAKUP_SYNTH_DECEXT is not setCONFIG_SPEAKUP_SYNTH_DECPC=mCONFIG_SPEAKUP_SYNTH_DTLK=m
# CONFIG_SPEAKUP_SYNTH_KEYPC is not set
# CONFIG_SPEAKUP_SYNTH_LTLK is not set
# CONFIG_SPEAKUP_SYNTH_SOFT is not setCONFIG_SPEAKUP_SYNTH_SPKOUT=m
# CONFIG_SPEAKUP_SYNTH_TXPRT is not set
# CONFIG_SPEAKUP_SYNTH_DUMMY is not set
# end of Speakup console speech
CONFIG_EDAC_SUPPORT=yCONFIG_EDAC=y
# CONFIG_EDAC_LEGACY_SYSFS is not setCONFIG_EDAC_DEBUG=y
# CONFIG_EDAC_AL_MC is not setCONFIG_EDAC_THUNDERX=m
# CONFIG_EDAC_ALTERA is not set
# CONFIG_EDAC_SYNOPSYS is not setCONFIG_EDAC_XGENE=m
# CONFIG_EDAC_QCOM is not setCONFIG_EDAC_BLUEFIELD=yCONFIG_EDAC_DMC520=mCONFIG_RTC_LIB=yCONFIG_RTC_CLASS=yCONFIG_RTC_HCTOSYS=yCONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_SYSTOHC is not set
# CONFIG_RTC_DEBUG is not setCONFIG_RTC_NVMEM=y
#
# RTC interfaces
#
# CONFIG_RTC_INTF_SYSFS is not set
# CONFIG_RTC_INTF_PROC is not setCONFIG_RTC_INTF_DEV=yCONFIG_RTC_INTF_DEV_UIE_EMUL=yCONFIG_RTC_DRV_TEST=y
#
# I2C RTC drivers
#CONFIG_RTC_DRV_88PM80X=m
# CONFIG_RTC_DRV_ABB5ZES3 is not setCONFIG_RTC_DRV_ABEOZ9=yCONFIG_RTC_DRV_ABX80X=yCONFIG_RTC_DRV_BRCMSTB=mCONFIG_RTC_DRV_AS3722=m
# CONFIG_RTC_DRV_DS1307 is not setCONFIG_RTC_DRV_DS1374=yCONFIG_RTC_DRV_DS1374_WDT=y
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_HYM8563 is not setCONFIG_RTC_DRV_MAX6900=mCONFIG_RTC_DRV_MAX8907=m
# CONFIG_RTC_DRV_MAX77686 is not setCONFIG_RTC_DRV_NCT3018Y=mCONFIG_RTC_DRV_RK808=m
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_ISL12022 is not setCONFIG_RTC_DRV_ISL12026=mCONFIG_RTC_DRV_X1205=m
# CONFIG_RTC_DRV_PCF8523 is not setCONFIG_RTC_DRV_PCF85063=mCONFIG_RTC_DRV_PCF85363=yCONFIG_RTC_DRV_PCF8563=yCONFIG_RTC_DRV_PCF8583=m
# CONFIG_RTC_DRV_M41T80 is not setCONFIG_RTC_DRV_BD70528=mCONFIG_RTC_DRV_BQ32K=mCONFIG_RTC_DRV_TWL4030=m
# CONFIG_RTC_DRV_PALMAS is not setCONFIG_RTC_DRV_RC5T619=mCONFIG_RTC_DRV_S35390A=m
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8010 is not set
# CONFIG_RTC_DRV_RX8581 is not setCONFIG_RTC_DRV_RX8025=mCONFIG_RTC_DRV_EM3027=yCONFIG_RTC_DRV_RV3028=mCONFIG_RTC_DRV_RV3032=y
# CONFIG_RTC_DRV_RV8803 is not set
# CONFIG_RTC_DRV_S5M is not set
# CONFIG_RTC_DRV_SD3078 is not set
#
# SPI RTC drivers
#CONFIG_RTC_I2C_AND_SPI=y
#
# SPI and I2C RTC drivers
#CONFIG_RTC_DRV_DS3232=y
# CONFIG_RTC_DRV_DS3232_HWMON is not setCONFIG_RTC_DRV_PCF2127=mCONFIG_RTC_DRV_RV3029C2=m
# CONFIG_RTC_DRV_RV3029_HWMON is not setCONFIG_RTC_DRV_RX6110=m
#
# Platform RTC drivers
#CONFIG_RTC_DRV_DS1286=mCONFIG_RTC_DRV_DS1511=mCONFIG_RTC_DRV_DS1553=m
# CONFIG_RTC_DRV_DS1685_FAMILY is not setCONFIG_RTC_DRV_DS1742=y
# CONFIG_RTC_DRV_DS2404 is not setCONFIG_RTC_DRV_DA9052=mCONFIG_RTC_DRV_DA9063=mCONFIG_RTC_DRV_STK17TA8=yCONFIG_RTC_DRV_M48T86=mCONFIG_RTC_DRV_M48T35=mCONFIG_RTC_DRV_M48T59=yCONFIG_RTC_DRV_MSM6242=yCONFIG_RTC_DRV_BQ4802=y
# CONFIG_RTC_DRV_RP5C01 is not setCONFIG_RTC_DRV_V3020=yCONFIG_RTC_DRV_GAMECUBE=mCONFIG_RTC_DRV_SC27XX=yCONFIG_RTC_DRV_SPEAR=m
# CONFIG_RTC_DRV_PCF50633 is not setCONFIG_RTC_DRV_ZYNQMP=yCONFIG_RTC_DRV_CROS_EC=mCONFIG_RTC_DRV_NTXEC=y
#
# on-CPU RTC drivers
#
# CONFIG_RTC_DRV_ASM9260 is not setCONFIG_RTC_DRV_DAVINCI=mCONFIG_RTC_DRV_DIGICOLOR=mCONFIG_RTC_DRV_FSL_FTM_ALARM=mCONFIG_RTC_DRV_MESON=y
# CONFIG_RTC_DRV_MESON_VRTC is not set
# CONFIG_RTC_DRV_OMAP is not set
# CONFIG_RTC_DRV_S3C is not setCONFIG_RTC_DRV_EP93XX=yCONFIG_RTC_DRV_SH=y
# CONFIG_RTC_DRV_PL030 is not setCONFIG_RTC_DRV_PL031=mCONFIG_RTC_DRV_AT91RM9200=yCONFIG_RTC_DRV_AT91SAM9=y
# CONFIG_RTC_DRV_RZN1 is not setCONFIG_RTC_DRV_GENERIC=yCONFIG_RTC_DRV_VT8500=mCONFIG_RTC_DRV_SUN6I=y
# CONFIG_RTC_DRV_SUNXI is not setCONFIG_RTC_DRV_MV=mCONFIG_RTC_DRV_ARMADA38X=y
# CONFIG_RTC_DRV_CADENCE is not setCONFIG_RTC_DRV_FTRTC010=mCONFIG_RTC_DRV_STMP=yCONFIG_RTC_DRV_MC13XXX=m
# CONFIG_RTC_DRV_JZ4740 is not set
# CONFIG_RTC_DRV_LPC24XX is not set
# CONFIG_RTC_DRV_LPC32XX is not setCONFIG_RTC_DRV_PM8XXX=m
# CONFIG_RTC_DRV_TEGRA is not setCONFIG_RTC_DRV_MXC=m
# CONFIG_RTC_DRV_MXC_V2 is not setCONFIG_RTC_DRV_SNVS=yCONFIG_RTC_DRV_MOXART=y
# CONFIG_RTC_DRV_MT2712 is not set
# CONFIG_RTC_DRV_MT6397 is not set
# CONFIG_RTC_DRV_MT7622 is not setCONFIG_RTC_DRV_XGENE=m
# CONFIG_RTC_DRV_R7301 is not setCONFIG_RTC_DRV_STM32=mCONFIG_RTC_DRV_RTD119X=y
# CONFIG_RTC_DRV_ASPEED is not set
# CONFIG_RTC_DRV_TI_K3 is not set
#
# HID Sensor RTC drivers
#
# CONFIG_RTC_DRV_GOLDFISH is not set
# CONFIG_RTC_DRV_MSC313 is not setCONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
#
# DMA Devices
#CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=yCONFIG_DMA_ENGINE=yCONFIG_DMA_VIRTUAL_CHANNELS=yCONFIG_DMA_OF=yCONFIG_ALTERA_MSGDMA=m
# CONFIG_AMBA_PL08X is not setCONFIG_APPLE_ADMAC=mCONFIG_AXI_DMAC=mCONFIG_DMA_JZ4780=mCONFIG_DMA_SA11X0=mCONFIG_DMA_SUN6I=m
# CONFIG_DW_AXI_DMAC is not set
# CONFIG_EP93XX_DMA is not setCONFIG_FSL_EDMA=mCONFIG_FSL_QDMA=mCONFIG_HISI_DMA=mCONFIG_IMG_MDC_DMA=yCONFIG_INTEL_IDMA64=m
# CONFIG_INTEL_IOP_ADMA is not setCONFIG_K3_DMA=yCONFIG_MCF_EDMA=yCONFIG_MILBEAUT_HDMAC=yCONFIG_MILBEAUT_XDMAC=mCONFIG_MMP_PDMA=yCONFIG_MMP_TDMA=yCONFIG_MV_XOR=y
# CONFIG_MV_XOR_V2 is not set
# CONFIG_MXS_DMA is not setCONFIG_NBPFAXI_DMA=mCONFIG_OWL_DMA=mCONFIG_PCH_DMA=y
# CONFIG_PL330_DMA is not set
# CONFIG_PLX_DMA is not set
# CONFIG_STM32_DMA is not setCONFIG_STM32_DMAMUX=yCONFIG_STM32_MDMA=yCONFIG_SPRD_DMA=yCONFIG_S3C24XX_DMAC=y
# CONFIG_TEGRA186_GPC_DMA is not setCONFIG_TEGRA20_APB_DMA=mCONFIG_TEGRA210_ADMA=mCONFIG_TIMB_DMA=mCONFIG_UNIPHIER_MDMAC=mCONFIG_UNIPHIER_XDMAC=yCONFIG_XGENE_DMA=mCONFIG_XILINX_DMA=yCONFIG_XILINX_ZYNQMP_DMA=yCONFIG_XILINX_ZYNQMP_DPDMA=m
# CONFIG_MTK_HSDMA is not setCONFIG_MTK_CQDMA=m
# CONFIG_QCOM_BAM_DMA is not setCONFIG_QCOM_GPI_DMA=y
# CONFIG_QCOM_HIDMA_MGMT is not setCONFIG_QCOM_HIDMA=yCONFIG_DW_DMAC_CORE=yCONFIG_DW_DMAC=yCONFIG_RZN1_DMAMUX=y
# CONFIG_DW_DMAC_PCI is not setCONFIG_DW_EDMA=yCONFIG_DW_EDMA_PCIE=yCONFIG_HSU_DMA=y
# CONFIG_SF_PDMA is not setCONFIG_RENESAS_DMA=y
# CONFIG_SH_DMAE_BASE is not setCONFIG_RCAR_DMAC=m
# CONFIG_RENESAS_USB_DMAC is not setCONFIG_RZ_DMAC=mCONFIG_TI_EDMA=y
# CONFIG_DMA_OMAP is not setCONFIG_TI_DMA_CROSSBAR=yCONFIG_FSL_DPAA2_QDMA=m
# CONFIG_INTEL_LDMA is not set
#
# DMA Clients
#
# CONFIG_ASYNC_TX_DMA is not setCONFIG_DMATEST=yCONFIG_DMA_ENGINE_RAID=y
#
# DMABUF options
#CONFIG_SYNC_FILE=yCONFIG_SW_SYNC=y
# CONFIG_UDMABUF is not set
# CONFIG_DMABUF_MOVE_NOTIFY is not set
# CONFIG_DMABUF_DEBUG is not setCONFIG_DMABUF_SELFTESTS=yCONFIG_DMABUF_HEAPS=yCONFIG_DMABUF_SYSFS_STATS=y
# CONFIG_DMABUF_HEAPS_SYSTEM is not setCONFIG_DMABUF_HEAPS_CMA=y
# end of DMABUF options
CONFIG_AUXDISPLAY=yCONFIG_CHARLCD=yCONFIG_LINEDISP=mCONFIG_HD44780_COMMON=yCONFIG_HD44780=yCONFIG_IMG_ASCII_LCD=m
# CONFIG_HT16K33 is not setCONFIG_LCD2S=yCONFIG_PARPORT_PANEL=mCONFIG_PANEL_PARPORT=0CONFIG_PANEL_PROFILE=5
# CONFIG_PANEL_CHANGE_MESSAGE is not setCONFIG_CHARLCD_BL_OFF=y
# CONFIG_CHARLCD_BL_ON is not set
# CONFIG_CHARLCD_BL_FLASH is not set
# CONFIG_PANEL is not setCONFIG_UIO=yCONFIG_UIO_CIF=mCONFIG_UIO_PDRV_GENIRQ=mCONFIG_UIO_DMEM_GENIRQ=mCONFIG_UIO_AEC=m
# CONFIG_UIO_SERCOS3 is not setCONFIG_UIO_PCI_GENERIC=mCONFIG_UIO_NETX=mCONFIG_UIO_PRUSS=m
# CONFIG_UIO_MF624 is not setCONFIG_VFIO=yCONFIG_VFIO_IOMMU_TYPE1=yCONFIG_VFIO_NOIOMMU=yCONFIG_VFIO_PCI_MMAP=yCONFIG_VFIO_PCI_INTX=y
# CONFIG_VFIO_PCI is not set
# CONFIG_VFIO_PLATFORM is not setCONFIG_VFIO_MDEV=y
# CONFIG_VFIO_FSL_MC is not set
# CONFIG_VIRT_DRIVERS is not setCONFIG_VIRTIO_ANCHOR=yCONFIG_VIRTIO=y
# CONFIG_VIRTIO_MENU is not setCONFIG_VHOST_IOTLB=mCONFIG_VHOST=mCONFIG_VHOST_MENU=yCONFIG_VHOST_SCSI=mCONFIG_VHOST_CROSS_ENDIAN_LEGACY=y
#
# Microsoft Hyper-V guest support
#
# end of Microsoft Hyper-V guest support
#
# Xen driver support
#CONFIG_XEN_BALLOON=yCONFIG_XEN_SCRUB_PAGES_DEFAULT=yCONFIG_XEN_DEV_EVTCHN=m
# CONFIG_XEN_BACKEND is not set
# CONFIG_XENFS is not setCONFIG_XEN_SYS_HYPERVISOR=yCONFIG_XEN_XENBUS_FRONTEND=yCONFIG_XEN_GNTDEV=m
# CONFIG_XEN_GNTDEV_DMABUF is not set
# CONFIG_XEN_GRANT_DEV_ALLOC is not setCONFIG_XEN_GRANT_DMA_ALLOC=yCONFIG_SWIOTLB_XEN=y
# CONFIG_XEN_PRIVCMD is not setCONFIG_XEN_AUTO_XLATE=yCONFIG_XEN_FRONT_PGDIR_SHBUF=y
# CONFIG_XEN_VIRTIO is not set
# end of Xen driver support
CONFIG_GREYBUS=mCONFIG_COMEDI=m
# CONFIG_COMEDI_DEBUG is not setCONFIG_COMEDI_DEFAULT_BUF_SIZE_KB=2048CONFIG_COMEDI_DEFAULT_BUF_MAXSIZE_KB=20480
# CONFIG_COMEDI_MISC_DRIVERS is not set
# CONFIG_COMEDI_ISA_DRIVERS is not setCONFIG_COMEDI_PCI_DRIVERS=mCONFIG_COMEDI_8255_PCI=mCONFIG_COMEDI_ADDI_WATCHDOG=m
# CONFIG_COMEDI_ADDI_APCI_1032 is not setCONFIG_COMEDI_ADDI_APCI_1500=mCONFIG_COMEDI_ADDI_APCI_1516=m
# CONFIG_COMEDI_ADDI_APCI_1564 is not set
# CONFIG_COMEDI_ADDI_APCI_16XX is not set
# CONFIG_COMEDI_ADDI_APCI_2032 is not set
# CONFIG_COMEDI_ADDI_APCI_2200 is not setCONFIG_COMEDI_ADDI_APCI_3120=mCONFIG_COMEDI_ADDI_APCI_3501=mCONFIG_COMEDI_ADDI_APCI_3XXX=mCONFIG_COMEDI_ADL_PCI6208=mCONFIG_COMEDI_ADL_PCI7X3X=mCONFIG_COMEDI_ADL_PCI8164=mCONFIG_COMEDI_ADL_PCI9111=m
# CONFIG_COMEDI_ADL_PCI9118 is not setCONFIG_COMEDI_ADV_PCI1710=mCONFIG_COMEDI_ADV_PCI1720=mCONFIG_COMEDI_ADV_PCI1723=mCONFIG_COMEDI_ADV_PCI1724=mCONFIG_COMEDI_ADV_PCI1760=mCONFIG_COMEDI_ADV_PCI_DIO=m
# CONFIG_COMEDI_AMPLC_DIO200_PCI is not setCONFIG_COMEDI_AMPLC_PC236_PCI=mCONFIG_COMEDI_AMPLC_PC263_PCI=mCONFIG_COMEDI_AMPLC_PCI224=m
# CONFIG_COMEDI_AMPLC_PCI230 is not set
# CONFIG_COMEDI_CONTEC_PCI_DIO is not setCONFIG_COMEDI_DAS08_PCI=mCONFIG_COMEDI_DT3000=m
# CONFIG_COMEDI_DYNA_PCI10XX is not setCONFIG_COMEDI_GSC_HPDI=mCONFIG_COMEDI_MF6X4=m
# CONFIG_COMEDI_ICP_MULTI is not set
# CONFIG_COMEDI_DAQBOARD2000 is not setCONFIG_COMEDI_JR3_PCI=m
# CONFIG_COMEDI_KE_COUNTER is not set
# CONFIG_COMEDI_CB_PCIDAS64 is not setCONFIG_COMEDI_CB_PCIDAS=m
# CONFIG_COMEDI_CB_PCIDDA is not set
# CONFIG_COMEDI_CB_PCIMDAS is not setCONFIG_COMEDI_CB_PCIMDDA=m
# CONFIG_COMEDI_ME4000 is not setCONFIG_COMEDI_ME_DAQ=m
# CONFIG_COMEDI_NI_6527 is not setCONFIG_COMEDI_NI_65XX=mCONFIG_COMEDI_NI_660X=mCONFIG_COMEDI_NI_670X=mCONFIG_COMEDI_NI_LABPC_PCI=mCONFIG_COMEDI_NI_PCIDIO=m
# CONFIG_COMEDI_NI_PCIMIO is not set
# CONFIG_COMEDI_RTD520 is not setCONFIG_COMEDI_S626=mCONFIG_COMEDI_MITE=mCONFIG_COMEDI_NI_TIOCMD=m
# CONFIG_COMEDI_PCMCIA_DRIVERS is not setCONFIG_COMEDI_8254=mCONFIG_COMEDI_8255=mCONFIG_COMEDI_8255_SA=mCONFIG_COMEDI_KCOMEDILIB=mCONFIG_COMEDI_AMPLC_PC236=mCONFIG_COMEDI_DAS08=mCONFIG_COMEDI_NI_LABPC=mCONFIG_COMEDI_NI_TIO=mCONFIG_COMEDI_NI_ROUTING=m
# CONFIG_COMEDI_TESTS is not setCONFIG_STAGING=y
#
# IIO staging drivers
#
#
# Accelerometers
#
# end of Accelerometers
#
# Analog to digital converters
#
# end of Analog to digital converters
#
# Analog digital bi-direction converters
#CONFIG_ADT7316=mCONFIG_ADT7316_I2C=m
# end of Analog digital bi-direction converters
#
# Capacitance to digital converters
#
# CONFIG_AD7746 is not set
# end of Capacitance to digital converters
#
# Direct Digital Synthesis
#
# end of Direct Digital Synthesis
#
# Network Analyzer, Impedance Converters
#
# CONFIG_AD5933 is not set
# end of Network Analyzer, Impedance Converters
#
# Active energy metering IC
#
# CONFIG_ADE7854 is not set
# end of Active energy metering IC
#
# Resolver to digital converters
#
# end of Resolver to digital converters # end of IIO staging drivers
# CONFIG_FB_SM750 is not set
# CONFIG_MFD_NVEC is not set
# CONFIG_STAGING_MEDIA is not set
# CONFIG_STAGING_BOARD is not setCONFIG_COMMON_CLK_XLNX_CLKWZRD=yCONFIG_MOST_COMPONENTS=mCONFIG_MOST_DIM2=mCONFIG_MOST_I2C=mCONFIG_GREYBUS_AUDIO=mCONFIG_GREYBUS_AUDIO_APB_CODEC=mCONFIG_GREYBUS_BOOTROM=mCONFIG_GREYBUS_HID=mCONFIG_GREYBUS_LIGHT=mCONFIG_GREYBUS_LOG=mCONFIG_GREYBUS_LOOPBACK=mCONFIG_GREYBUS_POWER=mCONFIG_GREYBUS_RAW=mCONFIG_GREYBUS_VIBRATOR=mCONFIG_GREYBUS_BRIDGED_PHY=mCONFIG_GREYBUS_GPIO=mCONFIG_GREYBUS_I2C=mCONFIG_GREYBUS_PWM=mCONFIG_GREYBUS_UART=mCONFIG_GREYBUS_ARCHE=mCONFIG_BCM_VIDEOCORE=mCONFIG_BCM2835_VCHIQ=mCONFIG_VCHIQ_CDEV=yCONFIG_SND_BCM2835=mCONFIG_BCM2835_VCHIQ_MMAL=mCONFIG_XIL_AXIS_FIFO=yCONFIG_FIELDBUS_DEV=yCONFIG_HMS_ANYBUSS_BUS=m
# CONFIG_ARCX_ANYBUS_CONTROLLER is not setCONFIG_HMS_PROFINET=m
# CONFIG_VME_BUS is not setCONFIG_GOLDFISH=y
# CONFIG_GOLDFISH_PIPE is not setCONFIG_CHROME_PLATFORMS=yCONFIG_CROS_EC=m
# CONFIG_CROS_EC_I2C is not setCONFIG_CROS_EC_RPMSG=mCONFIG_CROS_EC_PROTO=y
# CONFIG_CROS_KBD_LED_BACKLIGHT is not set
# CONFIG_CROS_EC_CHARDEV is not setCONFIG_CROS_EC_LIGHTBAR=mCONFIG_CROS_EC_VBC=mCONFIG_CROS_EC_DEBUGFS=m
# CONFIG_CROS_EC_SENSORHUB is not set
# CONFIG_CROS_EC_SYSFS is not setCONFIG_CROS_USBPD_NOTIFY=m
# CONFIG_MELLANOX_PLATFORM is not set
# CONFIG_OLPC_XO175 is not set
# CONFIG_SURFACE_PLATFORMS is not setCONFIG_HAVE_CLK=yCONFIG_HAVE_CLK_PREPARE=yCONFIG_COMMON_CLK=y
#
# Clock driver for ARM Reference designs
#
# CONFIG_CLK_ICST is not set
# CONFIG_CLK_SP810 is not setCONFIG_CLK_VEXPRESS_OSC=m
# end of Clock driver for ARM Reference designs
# CONFIG_CLK_HSDK is not setCONFIG_COMMON_CLK_APPLE_NCO=yCONFIG_COMMON_CLK_MAX77686=yCONFIG_COMMON_CLK_MAX9485=yCONFIG_COMMON_CLK_RK808=mCONFIG_COMMON_CLK_HI655X=mCONFIG_COMMON_CLK_SCMI=y
# CONFIG_COMMON_CLK_SCPI is not set
# CONFIG_COMMON_CLK_SI5341 is not setCONFIG_COMMON_CLK_SI5351=mCONFIG_COMMON_CLK_SI514=yCONFIG_COMMON_CLK_SI544=y
# CONFIG_COMMON_CLK_SI570 is not set
# CONFIG_COMMON_CLK_BM1880 is not setCONFIG_COMMON_CLK_CDCE706=mCONFIG_COMMON_CLK_TPS68470=y
# CONFIG_COMMON_CLK_CDCE925 is not setCONFIG_COMMON_CLK_CS2000_CP=mCONFIG_COMMON_CLK_EN7523=yCONFIG_COMMON_CLK_FSL_FLEXSPI=m
# CONFIG_COMMON_CLK_FSL_SAI is not set
# CONFIG_COMMON_CLK_GEMINI is not set
# CONFIG_COMMON_CLK_LAN966X is not set
# CONFIG_COMMON_CLK_ASPEED is not setCONFIG_COMMON_CLK_S2MPS11=m
# CONFIG_COMMON_CLK_AXI_CLKGEN is not set
# CONFIG_CLK_QORIQ is not setCONFIG_CLK_LS1028A_PLLDIG=mCONFIG_COMMON_CLK_XGENE=y
# CONFIG_COMMON_CLK_PALMAS is not setCONFIG_COMMON_CLK_PWM=m
# CONFIG_COMMON_CLK_OXNAS is not setCONFIG_COMMON_CLK_RS9_PCIE=mCONFIG_COMMON_CLK_VC5=mCONFIG_COMMON_CLK_MMP2_AUDIO=yCONFIG_COMMON_CLK_BD718XX=m
# CONFIG_COMMON_CLK_FIXED_MMIO is not set
# CONFIG_CLK_ACTIONS is not set
# CONFIG_CLK_BAIKAL_T1 is not setCONFIG_CLK_BCM2711_DVP=mCONFIG_CLK_BCM2835=y
# CONFIG_CLK_BCM_63XX is not setCONFIG_CLK_BCM_63XX_GATE=y
# CONFIG_CLK_BCM_KONA is not setCONFIG_COMMON_CLK_IPROC=y
# CONFIG_CLK_BCM_CYGNUS is not setCONFIG_CLK_BCM_HR2=yCONFIG_CLK_BCM_NSP=yCONFIG_CLK_BCM_NS2=y
# CONFIG_CLK_BCM_SR is not setCONFIG_CLK_RASPBERRYPI=y
# CONFIG_COMMON_CLK_HI3516CV300 is not setCONFIG_COMMON_CLK_HI3519=m
# CONFIG_COMMON_CLK_HI3559A is not set
# CONFIG_COMMON_CLK_HI3660 is not set
# CONFIG_COMMON_CLK_HI3670 is not setCONFIG_COMMON_CLK_HI3798CV200=y
# CONFIG_COMMON_CLK_HI6220 is not setCONFIG_RESET_HISI=y
# CONFIG_COMMON_CLK_BOSTON is not setCONFIG_MXC_CLK=yCONFIG_CLK_IMX8MM=y
# CONFIG_CLK_IMX8MN is not set
# CONFIG_CLK_IMX8MP is not setCONFIG_CLK_IMX8MQ=y
# CONFIG_CLK_IMX8ULP is not set
# CONFIG_CLK_IMX93 is not set
#
# Ingenic SoCs drivers
#CONFIG_INGENIC_CGU_COMMON=yCONFIG_INGENIC_CGU_JZ4740=yCONFIG_INGENIC_CGU_JZ4725B=y
# CONFIG_INGENIC_CGU_JZ4760 is not setCONFIG_INGENIC_CGU_JZ4770=yCONFIG_INGENIC_CGU_JZ4780=y
# CONFIG_INGENIC_CGU_X1000 is not setCONFIG_INGENIC_CGU_X1830=y
# CONFIG_INGENIC_TCU_CLK is not set
# end of Ingenic SoCs drivers
# CONFIG_COMMON_CLK_KEYSTONE is not setCONFIG_TI_SYSCON_CLK=m
#
# Clock driver for MediaTek SoC
#CONFIG_COMMON_CLK_MEDIATEK=y
# CONFIG_COMMON_CLK_MT2701 is not set
# CONFIG_COMMON_CLK_MT2712 is not setCONFIG_COMMON_CLK_MT6765=y
# CONFIG_COMMON_CLK_MT6765_AUDIOSYS is not setCONFIG_COMMON_CLK_MT6765_CAMSYS=yCONFIG_COMMON_CLK_MT6765_GCESYS=yCONFIG_COMMON_CLK_MT6765_MMSYS=y
# CONFIG_COMMON_CLK_MT6765_IMGSYS is not setCONFIG_COMMON_CLK_MT6765_VCODECSYS=yCONFIG_COMMON_CLK_MT6765_MFGSYS=yCONFIG_COMMON_CLK_MT6765_MIPI0ASYS=y
# CONFIG_COMMON_CLK_MT6765_MIPI0BSYS is not setCONFIG_COMMON_CLK_MT6765_MIPI1ASYS=yCONFIG_COMMON_CLK_MT6765_MIPI1BSYS=yCONFIG_COMMON_CLK_MT6765_MIPI2ASYS=yCONFIG_COMMON_CLK_MT6765_MIPI2BSYS=yCONFIG_COMMON_CLK_MT6779=mCONFIG_COMMON_CLK_MT6779_MMSYS=mCONFIG_COMMON_CLK_MT6779_IMGSYS=m
# CONFIG_COMMON_CLK_MT6779_IPESYS is not setCONFIG_COMMON_CLK_MT6779_CAMSYS=mCONFIG_COMMON_CLK_MT6779_VDECSYS=mCONFIG_COMMON_CLK_MT6779_VENCSYS=m
# CONFIG_COMMON_CLK_MT6779_MFGCFG is not setCONFIG_COMMON_CLK_MT6779_AUDSYS=mCONFIG_COMMON_CLK_MT6797=yCONFIG_COMMON_CLK_MT6797_MMSYS=yCONFIG_COMMON_CLK_MT6797_IMGSYS=y
# CONFIG_COMMON_CLK_MT6797_VDECSYS is not setCONFIG_COMMON_CLK_MT6797_VENCSYS=yCONFIG_COMMON_CLK_MT7622=y
# CONFIG_COMMON_CLK_MT7622_ETHSYS is not setCONFIG_COMMON_CLK_MT7622_HIFSYS=yCONFIG_COMMON_CLK_MT7622_AUDSYS=y
# CONFIG_COMMON_CLK_MT7629 is not set
# CONFIG_COMMON_CLK_MT7986 is not setCONFIG_COMMON_CLK_MT8135=y
# CONFIG_COMMON_CLK_MT8167 is not set
# CONFIG_COMMON_CLK_MT8173 is not set
# CONFIG_COMMON_CLK_MT8183 is not setCONFIG_COMMON_CLK_MT8186=yCONFIG_COMMON_CLK_MT8192=y
# CONFIG_COMMON_CLK_MT8192_AUDSYS is not setCONFIG_COMMON_CLK_MT8192_CAMSYS=yCONFIG_COMMON_CLK_MT8192_IMGSYS=yCONFIG_COMMON_CLK_MT8192_IMP_IIC_WRAP=yCONFIG_COMMON_CLK_MT8192_IPESYS=yCONFIG_COMMON_CLK_MT8192_MDPSYS=y
# CONFIG_COMMON_CLK_MT8192_MFGCFG is not setCONFIG_COMMON_CLK_MT8192_MMSYS=yCONFIG_COMMON_CLK_MT8192_MSDC=y
# CONFIG_COMMON_CLK_MT8192_SCP_ADSP is not set
# CONFIG_COMMON_CLK_MT8192_VDECSYS is not set
# CONFIG_COMMON_CLK_MT8192_VENCSYS is not setCONFIG_COMMON_CLK_MT8195=y
# CONFIG_COMMON_CLK_MT8516 is not set
# end of Clock driver for MediaTek SoC
#
# Clock support for Amlogic platforms
#CONFIG_COMMON_CLK_MESON_REGMAP=yCONFIG_COMMON_CLK_MESON_DUALDIV=yCONFIG_COMMON_CLK_MESON_MPLL=yCONFIG_COMMON_CLK_MESON_PLL=yCONFIG_COMMON_CLK_MESON_AO_CLKC=yCONFIG_COMMON_CLK_MESON_EE_CLKC=y
# CONFIG_COMMON_CLK_GXBB is not setCONFIG_COMMON_CLK_AXG=y
# CONFIG_COMMON_CLK_AXG_AUDIO is not set
# CONFIG_COMMON_CLK_G12A is not set
# end of Clock support for Amlogic platforms
# CONFIG_MSTAR_MSC313_MPLL is not setCONFIG_MCHP_CLK_MPFS=yCONFIG_ARMADA_AP_CP_HELPER=yCONFIG_ARMADA_37XX_CLK=yCONFIG_ARMADA_AP806_SYSCON=yCONFIG_ARMADA_AP_CPU_CLK=yCONFIG_ARMADA_CP110_SYSCON=yCONFIG_COMMON_CLK_PISTACHIO=yCONFIG_QCOM_GDSC=yCONFIG_COMMON_CLK_QCOM=mCONFIG_QCOM_A53PLL=m
# CONFIG_QCOM_A7PLL is not setCONFIG_QCOM_CLK_APCS_MSM8916=mCONFIG_QCOM_CLK_APCC_MSM8996=m
# CONFIG_QCOM_CLK_APCS_SDX55 is not set
# CONFIG_QCOM_CLK_RPM is not setCONFIG_APQ_GCC_8084=mCONFIG_APQ_MMCC_8084=mCONFIG_IPQ_APSS_PLL=mCONFIG_IPQ_APSS_6018=m
# CONFIG_IPQ_GCC_4019 is not set
# CONFIG_IPQ_GCC_6018 is not set
# CONFIG_IPQ_GCC_806X is not set
# CONFIG_IPQ_LCC_806X is not setCONFIG_IPQ_GCC_8074=m
# CONFIG_MSM_GCC_8660 is not setCONFIG_MSM_GCC_8916=m
# CONFIG_MSM_GCC_8939 is not setCONFIG_MSM_GCC_8960=mCONFIG_MSM_LCC_8960=mCONFIG_MDM_GCC_9607=mCONFIG_MDM_GCC_9615=mCONFIG_MDM_LCC_9615=m
# CONFIG_MSM_MMCC_8960 is not set
# CONFIG_MSM_GCC_8953 is not setCONFIG_MSM_GCC_8974=mCONFIG_MSM_MMCC_8974=mCONFIG_MSM_GCC_8976=mCONFIG_MSM_MMCC_8994=mCONFIG_MSM_GCC_8994=m
# CONFIG_MSM_GCC_8996 is not set
# CONFIG_MSM_MMCC_8996 is not setCONFIG_MSM_GCC_8998=mCONFIG_MSM_GPUCC_8998=mCONFIG_MSM_MMCC_8998=m
# CONFIG_QCM_GCC_2290 is not set
# CONFIG_QCM_DISPCC_2290 is not setCONFIG_QCS_GCC_404=mCONFIG_SC_CAMCC_7180=mCONFIG_SC_CAMCC_7280=m
# CONFIG_SC_DISPCC_7180 is not setCONFIG_SC_DISPCC_7280=mCONFIG_SC_GCC_7180=mCONFIG_SC_GCC_7280=mCONFIG_SC_GCC_8180X=mCONFIG_SC_GCC_8280XP=m
# CONFIG_SC_GPUCC_7180 is not setCONFIG_SC_GPUCC_7280=m
# CONFIG_SC_LPASSCC_7280 is not setCONFIG_SC_LPASS_CORECC_7180=mCONFIG_SC_LPASS_CORECC_7280=mCONFIG_SC_MSS_7180=mCONFIG_SC_VIDEOCC_7180=mCONFIG_SC_VIDEOCC_7280=m
# CONFIG_SDM_CAMCC_845 is not setCONFIG_SDM_GCC_660=m
# CONFIG_SDM_MMCC_660 is not set
# CONFIG_SDM_GPUCC_660 is not setCONFIG_QCS_TURING_404=mCONFIG_QCS_Q6SSTOP_404=mCONFIG_SDM_GCC_845=mCONFIG_SDM_GPUCC_845=mCONFIG_SDM_VIDEOCC_845=mCONFIG_SDM_DISPCC_845=m
# CONFIG_SDM_LPASSCC_845 is not set
# CONFIG_SDX_GCC_55 is not set
# CONFIG_SDX_GCC_65 is not set
# CONFIG_SM_CAMCC_8250 is not setCONFIG_SM_CAMCC_8450=mCONFIG_SM_DISPCC_8250=m
# CONFIG_SM_DISPCC_6350 is not setCONFIG_SM_GCC_6115=m
# CONFIG_SM_GCC_6125 is not setCONFIG_SM_GCC_6350=mCONFIG_SM_GCC_8150=mCONFIG_SM_GCC_8250=mCONFIG_SM_GCC_8350=mCONFIG_SM_GCC_8450=mCONFIG_SM_GPUCC_6350=mCONFIG_SM_GPUCC_8150=m
# CONFIG_SM_GPUCC_8250 is not setCONFIG_SM_GPUCC_8350=mCONFIG_SM_VIDEOCC_8150=mCONFIG_SM_VIDEOCC_8250=m
# CONFIG_SPMI_PMIC_CLKDIV is not set
# CONFIG_QCOM_HFPLL is not set
# CONFIG_KPSS_XCC is not setCONFIG_CLK_GFM_LPASS_SM8250=mCONFIG_CLK_MT7621=yCONFIG_CLK_RENESAS=yCONFIG_CLK_EMEV2=yCONFIG_CLK_RZA1=yCONFIG_CLK_R7S9210=y
# CONFIG_CLK_R8A73A4 is not setCONFIG_CLK_R8A7740=y
# CONFIG_CLK_R8A7742 is not setCONFIG_CLK_R8A7743=yCONFIG_CLK_R8A7745=y
# CONFIG_CLK_R8A77470 is not setCONFIG_CLK_R8A774A1=y
# CONFIG_CLK_R8A774B1 is not setCONFIG_CLK_R8A774C0=yCONFIG_CLK_R8A774E1=yCONFIG_CLK_R8A7778=y
# CONFIG_CLK_R8A7779 is not setCONFIG_CLK_R8A7790=y
# CONFIG_CLK_R8A7791 is not set
# CONFIG_CLK_R8A7792 is not setCONFIG_CLK_R8A7794=yCONFIG_CLK_R8A7795=yCONFIG_CLK_R8A77960=y
# CONFIG_CLK_R8A77961 is not setCONFIG_CLK_R8A77965=yCONFIG_CLK_R8A77970=yCONFIG_CLK_R8A77980=y
# CONFIG_CLK_R8A77990 is not set
# CONFIG_CLK_R8A77995 is not set
# CONFIG_CLK_R8A779A0 is not set
# CONFIG_CLK_R8A779F0 is not setCONFIG_CLK_R8A779G0=y
# CONFIG_CLK_R9A06G032 is not setCONFIG_CLK_R9A07G043=yCONFIG_CLK_R9A07G044=yCONFIG_CLK_R9A07G054=yCONFIG_CLK_R9A09G011=y
# CONFIG_CLK_SH73A0 is not setCONFIG_CLK_RCAR_CPG_LIB=yCONFIG_CLK_RCAR_GEN2_CPG=yCONFIG_CLK_RCAR_GEN3_CPG=yCONFIG_CLK_RCAR_GEN4_CPG=yCONFIG_CLK_RCAR_USB2_CLOCK_SEL=yCONFIG_CLK_RZG2L=yCONFIG_CLK_RENESAS_CPG_MSSR=yCONFIG_CLK_RENESAS_CPG_MSTP=yCONFIG_CLK_RENESAS_DIV6=yCONFIG_COMMON_CLK_SAMSUNG=y
# CONFIG_S3C64XX_COMMON_CLK is not setCONFIG_S5PV210_COMMON_CLK=y
# CONFIG_EXYNOS_3250_COMMON_CLK is not set
# CONFIG_EXYNOS_4_COMMON_CLK is not set
# CONFIG_EXYNOS_5250_COMMON_CLK is not set
# CONFIG_EXYNOS_5260_COMMON_CLK is not set
# CONFIG_EXYNOS_5410_COMMON_CLK is not setCONFIG_EXYNOS_5420_COMMON_CLK=yCONFIG_EXYNOS_ARM64_COMMON_CLK=yCONFIG_EXYNOS_AUDSS_CLK_CON=yCONFIG_EXYNOS_CLKOUT=mCONFIG_S3C2410_COMMON_CLK=y
# CONFIG_S3C2412_COMMON_CLK is not set
# CONFIG_S3C2443_COMMON_CLK is not set
# CONFIG_TESLA_FSD_COMMON_CLK is not set
# CONFIG_CLK_SIFIVE is not setCONFIG_CLK_INTEL_SOCFPGA=yCONFIG_CLK_INTEL_SOCFPGA32=yCONFIG_CLK_INTEL_SOCFPGA64=y
# CONFIG_SPRD_COMMON_CLK is not set
# CONFIG_CLK_STARFIVE_JH7100 is not setCONFIG_CLK_SUNXI=y
# CONFIG_CLK_SUNXI_CLOCKS is not setCONFIG_CLK_SUNXI_PRCM_SUN6I=yCONFIG_CLK_SUNXI_PRCM_SUN8I=yCONFIG_CLK_SUNXI_PRCM_SUN9I=yCONFIG_SUNXI_CCU=mCONFIG_SUNIV_F1C100S_CCU=mCONFIG_SUN20I_D1_CCU=mCONFIG_SUN20I_D1_R_CCU=mCONFIG_SUN50I_A64_CCU=mCONFIG_SUN50I_A100_CCU=mCONFIG_SUN50I_A100_R_CCU=m
# CONFIG_SUN50I_H6_CCU is not set
# CONFIG_SUN50I_H616_CCU is not setCONFIG_SUN50I_H6_R_CCU=m
# CONFIG_SUN4I_A10_CCU is not setCONFIG_SUN6I_A31_CCU=m
# CONFIG_SUN6I_RTC_CCU is not setCONFIG_SUN8I_A23_CCU=mCONFIG_SUN8I_A33_CCU=mCONFIG_SUN8I_A83T_CCU=mCONFIG_SUN8I_H3_CCU=mCONFIG_SUN8I_V3S_CCU=mCONFIG_SUN8I_DE2_CCU=mCONFIG_SUN8I_R40_CCU=mCONFIG_SUN9I_A80_CCU=mCONFIG_SUN8I_R_CCU=mCONFIG_TEGRA_CLK_DFLL=yCONFIG_COMMON_CLK_TI_ADPLL=y
# CONFIG_CLK_UNIPHIER is not setCONFIG_COMMON_CLK_VISCONTI=yCONFIG_CLK_LGM_CGU=yCONFIG_XILINX_VCU=m
# CONFIG_COMMON_CLK_ZYNQMP is not setCONFIG_HWSPINLOCK=yCONFIG_HWSPINLOCK_OMAP=m
# CONFIG_HWSPINLOCK_QCOM is not setCONFIG_HWSPINLOCK_SPRD=m
# CONFIG_HWSPINLOCK_STM32 is not setCONFIG_HWSPINLOCK_SUN6I=m
# CONFIG_HSEM_U8500 is not set
#
# Clock Source drivers
#CONFIG_TIMER_OF=yCONFIG_TIMER_PROBE=yCONFIG_CLKSRC_MMIO=y
# CONFIG_BCM2835_TIMER is not set
# CONFIG_BCM_KONA_TIMER is not setCONFIG_DAVINCI_TIMER=y
# CONFIG_DIGICOLOR_TIMER is not set
# CONFIG_OMAP_DM_TIMER is not setCONFIG_DW_APB_TIMER=yCONFIG_DW_APB_TIMER_OF=y
# CONFIG_FTTMR010_TIMER is not set
# CONFIG_IXP4XX_TIMER is not set
# CONFIG_ROCKCHIP_TIMER is not setCONFIG_MESON6_TIMER=yCONFIG_OWL_TIMER=y
# CONFIG_RDA_TIMER is not setCONFIG_SUN4I_TIMER=y
# CONFIG_SUN5I_HSTIMER is not setCONFIG_TEGRA_TIMER=y
# CONFIG_TEGRA186_TIMER is not set
# CONFIG_VT8500_TIMER is not setCONFIG_NPCM7XX_TIMER=y
# CONFIG_CADENCE_TTC_TIMER is not setCONFIG_ASM9260_TIMER=y
# CONFIG_CLKSRC_DBX500_PRCMU is not set
# CONFIG_CLPS711X_TIMER is not set
# CONFIG_MXS_TIMER is not setCONFIG_NSPIRE_TIMER=yCONFIG_KEYSTONE_TIMER=y
# CONFIG_INTEGRATOR_AP_TIMER is not setCONFIG_CLKSRC_PISTACHIO=yCONFIG_CLKSRC_TI_32K=y
# CONFIG_CLKSRC_STM32_LP is not setCONFIG_CLKSRC_MPS2=y
# CONFIG_ARC_TIMERS is not setCONFIG_ARM_ARCH_TIMER=yCONFIG_ARM_ARCH_TIMER_EVTSTREAM=yCONFIG_ARM_ARCH_TIMER_OOL_WORKAROUND=yCONFIG_FSL_ERRATUM_A008585=y
# CONFIG_HISILICON_ERRATUM_161010101 is not set
# CONFIG_ARM64_ERRATUM_858921 is not set
# CONFIG_SUN50I_ERRATUM_UNKNOWN1 is not setCONFIG_ARM_TIMER_SP804=y
# CONFIG_ARMV7M_SYSTICK is not setCONFIG_ATMEL_PIT=y
# CONFIG_ATMEL_ST is not setCONFIG_CLKSRC_EXYNOS_MCT=yCONFIG_CLKSRC_SAMSUNG_PWM=y
# CONFIG_FSL_FTM_TIMER is not set
# CONFIG_OXNAS_RPS_TIMER is not setCONFIG_SYS_SUPPORTS_SH_CMT=yCONFIG_MTK_TIMER=yCONFIG_SPRD_TIMER=yCONFIG_SYS_SUPPORTS_SH_TMU=yCONFIG_CLKSRC_JCORE_PIT=y
# CONFIG_SH_TIMER_CMT is not set
# CONFIG_SH_TIMER_MTU2 is not set
# CONFIG_RENESAS_OSTM is not set
# CONFIG_SH_TIMER_TMU is not set
# CONFIG_EM_TIMER_STI is not setCONFIG_CLKSRC_VERSATILE=yCONFIG_CLKSRC_PXA=yCONFIG_CLKSRC_IMX_GPT=yCONFIG_CLKSRC_IMX_TPM=yCONFIG_TIMER_IMX_SYS_CTR=yCONFIG_CLKSRC_ST_LPC=yCONFIG_GXP_TIMER=yCONFIG_MSC313E_TIMER=y
# CONFIG_INGENIC_TIMER is not setCONFIG_INGENIC_SYSOST=y
# CONFIG_INGENIC_OST is not set
# CONFIG_MICROCHIP_PIT64B is not set
# end of Clock Source drivers
# CONFIG_MAILBOX is not setCONFIG_IOMMU_IOVA=yCONFIG_IOASID=yCONFIG_IOMMU_API=yCONFIG_IOMMU_SUPPORT=y
#
# Generic IOMMU Pagetable Support
#CONFIG_IOMMU_IO_PGTABLE=yCONFIG_IOMMU_IO_PGTABLE_LPAE=yCONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST=y
# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set
# end of Generic IOMMU Pagetable Support
CONFIG_IOMMU_DEBUGFS=y
# CONFIG_IOMMU_DEFAULT_DMA_STRICT is not set
# CONFIG_IOMMU_DEFAULT_DMA_LAZY is not setCONFIG_IOMMU_DEFAULT_PASSTHROUGH=yCONFIG_OF_IOMMU=yCONFIG_IOMMU_DMA=yCONFIG_IOMMU_SVA=y
# CONFIG_OMAP_IOMMU is not setCONFIG_ROCKCHIP_IOMMU=y
# CONFIG_SUN50I_IOMMU is not set
# CONFIG_IPMMU_VMSA is not setCONFIG_APPLE_DART=y
# CONFIG_ARM_SMMU is not setCONFIG_ARM_SMMU_V3=yCONFIG_ARM_SMMU_V3_SVA=yCONFIG_S390_CCW_IOMMU=y
# CONFIG_S390_AP_IOMMU is not set
# CONFIG_MTK_IOMMU is not setCONFIG_QCOM_IOMMU=yCONFIG_VIRTIO_IOMMU=y
# CONFIG_SPRD_IOMMU is not set
#
# Remoteproc drivers
#
# CONFIG_REMOTEPROC is not set
# end of Remoteproc drivers
#
# Rpmsg drivers
#CONFIG_RPMSG=yCONFIG_RPMSG_CTRL=mCONFIG_RPMSG_NS=yCONFIG_RPMSG_VIRTIO=y
# end of Rpmsg drivers
CONFIG_SOUNDWIRE=y
#
# SoundWire Devices
#CONFIG_SOUNDWIRE_QCOM=m
#
# SOC (System On Chip) specific Drivers
#
# CONFIG_OWL_PM_DOMAINS is not set
#
# Amlogic SoC drivers
#
# CONFIG_MESON_CANVAS is not set
# CONFIG_MESON_CLK_MEASURE is not set
# CONFIG_MESON_GX_SOCINFO is not setCONFIG_MESON_GX_PM_DOMAINS=yCONFIG_MESON_EE_PM_DOMAINS=m
# CONFIG_MESON_MX_SOCINFO is not set
# end of Amlogic SoC drivers
#
# Apple SoC drivers
#CONFIG_APPLE_PMGR_PWRSTATE=yCONFIG_APPLE_SART=m
# end of Apple SoC drivers
#
# ASPEED SoC drivers
#CONFIG_ASPEED_LPC_CTRL=y
# CONFIG_ASPEED_LPC_SNOOP is not set
# CONFIG_ASPEED_UART_ROUTING is not setCONFIG_ASPEED_P2A_CTRL=y
# CONFIG_ASPEED_SOCINFO is not set
# end of ASPEED SoC drivers
CONFIG_AT91_SOC_ID=y
# CONFIG_AT91_SOC_SFR is not set
#
# Broadcom SoC drivers
#CONFIG_BCM2835_POWER=yCONFIG_SOC_BCM63XX=y
# CONFIG_SOC_BRCMSTB is not set
# CONFIG_BCM63XX_POWER is not set
# CONFIG_BCM_PMB is not set
# end of Broadcom SoC drivers
#
# NXP/Freescale QorIQ SoC drivers
#
# CONFIG_QUICC_ENGINE is not setCONFIG_FSL_GUTS=yCONFIG_FSL_MC_DPIO=mCONFIG_DPAA2_CONSOLE=m
# CONFIG_FSL_RCPM is not set
# end of NXP/Freescale QorIQ SoC drivers
#
# fujitsu SoC drivers # # end of fujitsu SoC drivers
#
# i.MX SoC drivers
#CONFIG_IMX_GPCV2_PM_DOMAINS=yCONFIG_SOC_IMX8M=y
# end of i.MX SoC drivers
#
# IXP4xx SoC drivers
#
# CONFIG_IXP4XX_QMGR is not setCONFIG_IXP4XX_NPE=m
# end of IXP4xx SoC drivers
#
# Enable LiteX SoC Builder specific drivers
#CONFIG_LITEX=yCONFIG_LITEX_SOC_CONTROLLER=y
# end of Enable LiteX SoC Builder specific drivers
#
# MediaTek SoC drivers
#
# CONFIG_MTK_CMDQ is not setCONFIG_MTK_DEVAPC=yCONFIG_MTK_INFRACFG=yCONFIG_MTK_PMIC_WRAP=yCONFIG_MTK_SCPSYS=y
# CONFIG_MTK_SCPSYS_PM_DOMAINS is not setCONFIG_MTK_MMSYS=y
# end of MediaTek SoC drivers
#
# Qualcomm SoC drivers
#CONFIG_QCOM_COMMAND_DB=mCONFIG_QCOM_CPR=mCONFIG_QCOM_GENI_SE=mCONFIG_QCOM_GSBI=mCONFIG_QCOM_LLCC=yCONFIG_QCOM_KRYO_L2_ACCESSORS=yCONFIG_QCOM_OCMEM=yCONFIG_QCOM_RMTFS_MEM=m
# CONFIG_QCOM_RPMH is not set
# CONFIG_QCOM_SMEM is not set
# CONFIG_QCOM_SMD_RPM is not setCONFIG_QCOM_SPM=mCONFIG_QCOM_WCNSS_CTRL=mCONFIG_QCOM_ICC_BWMON=m
# end of Qualcomm SoC drivers
CONFIG_SOC_RENESAS=yCONFIG_ARCH_RCAR_GEN3=yCONFIG_ARCH_RZG2L=y
# CONFIG_ARCH_R8A77995 is not set
# CONFIG_ARCH_R8A77990 is not set
# CONFIG_ARCH_R8A77950 is not set
# CONFIG_ARCH_R8A77951 is not set
# CONFIG_ARCH_R8A77965 is not setCONFIG_ARCH_R8A77960=y
# CONFIG_ARCH_R8A77961 is not set
# CONFIG_ARCH_R8A779F0 is not setCONFIG_ARCH_R8A77980=yCONFIG_ARCH_R8A77970=y
# CONFIG_ARCH_R8A779A0 is not setCONFIG_ARCH_R8A779G0=y
# CONFIG_ARCH_R8A774C0 is not set
# CONFIG_ARCH_R8A774E1 is not set
# CONFIG_ARCH_R8A774A1 is not set
# CONFIG_ARCH_R8A774B1 is not setCONFIG_ARCH_R9A07G043=yCONFIG_ARCH_R9A07G044=y
# CONFIG_ARCH_R9A07G054 is not set
# CONFIG_ARCH_R9A09G011 is not setCONFIG_RST_RCAR=yCONFIG_SYSC_RCAR=yCONFIG_SYSC_RCAR_GEN4=yCONFIG_SYSC_R8A77995=y
# CONFIG_SYSC_R8A7794 is not set
# CONFIG_SYSC_R8A77990 is not set
# CONFIG_SYSC_R8A7779 is not setCONFIG_SYSC_R8A7790=y
# CONFIG_SYSC_R8A7795 is not setCONFIG_SYSC_R8A7791=y
# CONFIG_SYSC_R8A77965 is not setCONFIG_SYSC_R8A77960=y
# CONFIG_SYSC_R8A77961 is not setCONFIG_SYSC_R8A779F0=yCONFIG_SYSC_R8A7792=yCONFIG_SYSC_R8A77980=yCONFIG_SYSC_R8A77970=yCONFIG_SYSC_R8A779A0=yCONFIG_SYSC_R8A779G0=y
# CONFIG_SYSC_RMOBILE is not setCONFIG_SYSC_R8A77470=yCONFIG_SYSC_R8A7745=yCONFIG_SYSC_R8A7742=yCONFIG_SYSC_R8A7743=yCONFIG_SYSC_R8A774C0=y
# CONFIG_SYSC_R8A774E1 is not setCONFIG_SYSC_R8A774A1=y
# CONFIG_SYSC_R8A774B1 is not setCONFIG_ROCKCHIP_GRF=yCONFIG_ROCKCHIP_IODOMAIN=mCONFIG_ROCKCHIP_PM_DOMAINS=y
# CONFIG_ROCKCHIP_DTPM is not setCONFIG_SOC_SAMSUNG=yCONFIG_EXYNOS_ASV_ARM=yCONFIG_EXYNOS_CHIPID=y
# CONFIG_EXYNOS_USI is not setCONFIG_EXYNOS_PMU=yCONFIG_EXYNOS_PMU_ARM_DRIVERS=yCONFIG_EXYNOS_PM_DOMAINS=y
# CONFIG_EXYNOS_REGULATOR_COUPLER is not setCONFIG_SUNXI_MBUS=yCONFIG_SUNXI_SRAM=yCONFIG_ARCH_TEGRA_132_SOC=yCONFIG_ARCH_TEGRA_210_SOC=y
# CONFIG_ARCH_TEGRA_186_SOC is not set
# CONFIG_ARCH_TEGRA_194_SOC is not set
# CONFIG_ARCH_TEGRA_234_SOC is not setCONFIG_SOC_TEGRA_FUSE=yCONFIG_SOC_TEGRA_FLOWCTRL=yCONFIG_SOC_TEGRA_PMC=y
# CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER is not set
# CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER is not set
# CONFIG_SOC_TI is not set
# CONFIG_UX500_SOC_ID is not set
#
# Xilinx SoC drivers
#
# CONFIG_ZYNQMP_POWER is not set
# CONFIG_ZYNQMP_PM_DOMAINS is not set
# CONFIG_XLNX_EVENT_MANAGER is not set
# end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers
CONFIG_PM_DEVFREQ=y
#
# DEVFREQ Governors
#CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=yCONFIG_DEVFREQ_GOV_PERFORMANCE=mCONFIG_DEVFREQ_GOV_POWERSAVE=mCONFIG_DEVFREQ_GOV_USERSPACE=yCONFIG_DEVFREQ_GOV_PASSIVE=y
#
# DEVFREQ Drivers
#
# CONFIG_ARM_EXYNOS_BUS_DEVFREQ is not setCONFIG_ARM_IMX_BUS_DEVFREQ=y
# CONFIG_ARM_IMX8M_DDRC_DEVFREQ is not set
# CONFIG_ARM_TEGRA_DEVFREQ is not setCONFIG_ARM_MEDIATEK_CCI_DEVFREQ=y
# CONFIG_ARM_RK3399_DMC_DEVFREQ is not setCONFIG_ARM_SUN8I_A33_MBUS_DEVFREQ=m
# CONFIG_PM_DEVFREQ_EVENT is not setCONFIG_EXTCON=y
#
# Extcon Device Drivers
#
# CONFIG_EXTCON_ADC_JACK is not setCONFIG_EXTCON_FSA9480=m
# CONFIG_EXTCON_GPIO is not set
# CONFIG_EXTCON_MAX14577 is not set
# CONFIG_EXTCON_MAX3355 is not set
# CONFIG_EXTCON_MAX77843 is not set
# CONFIG_EXTCON_PALMAS is not setCONFIG_EXTCON_PTN5150=yCONFIG_EXTCON_QCOM_SPMI_MISC=yCONFIG_EXTCON_RT8973A=yCONFIG_EXTCON_SM5502=mCONFIG_EXTCON_USB_GPIO=yCONFIG_EXTCON_USBC_CROS_EC=mCONFIG_EXTCON_USBC_TUSB320=y
# CONFIG_MEMORY is not setCONFIG_IIO=mCONFIG_IIO_BUFFER=yCONFIG_IIO_BUFFER_CB=mCONFIG_IIO_BUFFER_DMA=mCONFIG_IIO_BUFFER_DMAENGINE=mCONFIG_IIO_BUFFER_HW_CONSUMER=mCONFIG_IIO_KFIFO_BUF=mCONFIG_IIO_TRIGGERED_BUFFER=mCONFIG_IIO_CONFIGFS=mCONFIG_IIO_TRIGGER=yCONFIG_IIO_CONSUMERS_PER_TRIGGER=2CONFIG_IIO_SW_DEVICE=mCONFIG_IIO_SW_TRIGGER=mCONFIG_IIO_TRIGGERED_EVENT=m
#
# Accelerometers
#CONFIG_ADXL313=mCONFIG_ADXL313_I2C=mCONFIG_ADXL345=mCONFIG_ADXL345_I2C=m
# CONFIG_ADXL355_I2C is not set
# CONFIG_ADXL367_I2C is not set
# CONFIG_ADXL372_I2C is not set
# CONFIG_BMA180 is not setCONFIG_BMA400=mCONFIG_BMA400_I2C=mCONFIG_BMC150_ACCEL=mCONFIG_BMC150_ACCEL_I2C=mCONFIG_DA280=mCONFIG_DA311=mCONFIG_DMARD06=mCONFIG_DMARD09=mCONFIG_DMARD10=mCONFIG_FXLS8962AF=mCONFIG_FXLS8962AF_I2C=m
# CONFIG_HID_SENSOR_ACCEL_3D is not setCONFIG_IIO_ST_ACCEL_3AXIS=mCONFIG_IIO_ST_ACCEL_I2C_3AXIS=m
# CONFIG_KXSD9 is not set
# CONFIG_KXCJK1013 is not set
# CONFIG_MC3230 is not setCONFIG_MMA7455=mCONFIG_MMA7455_I2C=mCONFIG_MMA7660=mCONFIG_MMA8452=mCONFIG_MMA9551_CORE=m
# CONFIG_MMA9551 is not setCONFIG_MMA9553=mCONFIG_MXC4005=m
# CONFIG_MXC6255 is not setCONFIG_STK8312=m
# CONFIG_STK8BA50 is not set
# end of Accelerometers
1,636 lines not shown · raw message
Part of this message is not shown here. View the raw message.
Will Deacon
maintainerPATCH v3 15/25 KVM: arm64: Initialise hypervisor copies of host symbols unconditionally
In reply to Will DeaconThe nVHE object at EL2 maintains its own copies of some host variables so that, when pKVM is enabled, the host cannot directly modify the hypervisor state. When running in normal nVHE mode, however, these variables are still mirrored at EL2 but are not initialised.
Initialise the hypervisor symbols from the host copies regardless of pKVM, ensuring that any reference to this data at EL2 with normal nVHE will return a sensibly initialised value.
--- arch/arm64/kvm/arm.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-)
arch/arm64/kvm/arm.c +9 -6
@@ -1886,11 +1886,8 @@ static int do_pkvm_init(u32 hyp_va_bits)return ret; } -static int kvm_hyp_init_protection (u32 hyp_va_bits) +static void kvm_hyp_init_symbols (void ) { -void *addr =phys_to_virt (hyp_mem_base); -int ret; -kvm_nvhe_sym (id_aa64pfr0_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64PFR0_EL1 );kvm_nvhe_sym (id_aa64pfr1_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64PFR1_EL1 );kvm_nvhe_sym (id_aa64isar0_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64ISAR0_EL1 );
@@ -1899,6 +1896,12 @@ static int kvm_hyp_init_protection(u32 hyp_va_bits)kvm_nvhe_sym (id_aa64mmfr0_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 );kvm_nvhe_sym (id_aa64mmfr1_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR1_EL1 );kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR2_EL1 ); +} + +static int kvm_hyp_init_protection (u32 hyp_va_bits) +{ +void *addr =phys_to_virt (hyp_mem_base); +int ret; ret =create_hyp_mappings (addr, addr + hyp_mem_size,PAGE_HYP );if (ret)
@@ -2073,6 +2076,8 @@ static int init_hyp_mode(void)cpu_prepare_hyp_mode (cpu); } +kvm_hyp_init_symbols (); +if (is_protected_kvm_enabled ()) {init_cpu_logical_map ();
@@ -2080,9 +2085,7 @@ static int init_hyp_mode(void) err = -ENODEV ; goto out_err; } - } -if (is_protected_kvm_enabled ()) { err =kvm_hyp_init_protection (hyp_va_bits);if (err) {kvm_err ("Failed to init hyp memory protection\n" );
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 16/25 KVM: arm64: Provide I-cache invalidation by virtual address at EL2
In reply to Will DeaconIn preparation for handling cache maintenance of guest pages from within the pKVM hypervisor at EL2, introduce an EL2 copy of icache_inval_pou() which will later be plumbed into the stage-2 page-table cache maintenance callbacks, ensuring that the initial contents of pages mapped as executable into the guest stage-2 page-table is visible to the instruction fetcher.
--- arch/arm64/include/asm/kvm_hyp.h | 1 + arch/arm64/kernel/image-vars.h | 3 --- arch/arm64/kvm/arm.c | 1 + arch/arm64/kvm/hyp/nvhe/cache.S | 11 +++++++++++ arch/arm64/kvm/hyp/nvhe/pkvm.c | 3 +++ 5 files changed, 16 insertions(+), 3 deletions(-)
arch/arm64/include/asm/kvm_hyp.h +1 -0
@@ -123,4 +123,5 @@ extern u64 kvm_nvhe_sym(id_aa64mmfr0_el1_sys_val);extern u64 kvm_nvhe_sym (id_aa64mmfr1_el1_sys_val );extern u64 kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val ); +extern unsigned long kvm_nvhe_sym (__icache_flags );#endif /* __ARM64_KVM_HYP_H__ */
arch/arm64/kernel/image-vars.h +0 -3
@@ -83,9 +83,6 @@ KVM_NVHE_ALIAS(nvhe_hyp_panic_handler);/* Vectors installed by hyp-init on reset HVC. */ KVM_NVHE_ALIAS (__hyp_stub_vectors); -/* Kernel symbol used by icache_is_vpipt(). */ -KVM_NVHE_ALIAS (__icache_flags); -/* VMID bits set by the KVM VMID allocator */ KVM_NVHE_ALIAS (kvm_arm_vmid_bits);
arch/arm64/kvm/arm.c +1 -0
@@ -1896,6 +1896,7 @@ static void kvm_hyp_init_symbols(void)kvm_nvhe_sym (id_aa64mmfr0_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 );kvm_nvhe_sym (id_aa64mmfr1_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR1_EL1 );kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR2_EL1 ); +kvm_nvhe_sym (__icache_flags) = __icache_flags; }static int kvm_hyp_init_protection (u32 hyp_va_bits)
arch/arm64/kvm/hyp/nvhe/cache.S +11 -0
@@ -12,3 +12,14 @@ SYM_FUNC_START(__pi_dcache_clean_inval_poc) ret SYM_FUNC_END(__pi_dcache_clean_inval_poc) SYM_FUNC_ALIAS(dcache_clean_inval_poc, __pi_dcache_clean_inval_poc) + +SYM_FUNC_START(__pi_icache_inval_pou) +alternative_if ARM64_HAS_CACHE_DIC + isb + ret +alternative_else_nop_endif + + invalidate_icache_by_line x0, x1, x2, x3 + ret +SYM_FUNC_END(__pi_icache_inval_pou) +SYM_FUNC_ALIAS(icache_inval_pou, __pi_icache_inval_pou)
arch/arm64/kvm/hyp/nvhe/pkvm.c +3 -0
@@ -12,6 +12,9 @@#include <nvhe/pkvm.h> #include <nvhe/trap_handler.h> +/* Used by icache_is_vpipt(). */ +unsigned long __icache_flags; +/* * Set trap register values based on features in ID_AA64PFR0. */
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 17/25 KVM: arm64: Add generic hyp_memcache helpers
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
The host at EL1 and the pKVM hypervisor at EL2 will soon need to exchange memory pages dynamically for creating and destroying VM state.
Indeed, the hypervisor will rely on the host to donate memory pages it can use to create guest stage-2 page-tables and to store VM and vCPU metadata. In order to ease this process, introduce a
'struct hyp_memcache' which is essentially a linked list of available pages, indexed by physical addresses so that it can be passed meaningfully between the different virtual address spaces configured at EL1 and EL2.
--- arch/arm64/include/asm/kvm_host.h | 57 +++++++++++++++++++ arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 2 + arch/arm64/kvm/hyp/nvhe/mm.c | 33 +++++++++++ arch/arm64/kvm/mmu.c | 26 +++++++++ 4 files changed, 118 insertions(+)
arch/arm64/include/asm/kvm_host.h +57 -0
@@ -73,6 +73,63 @@ u32 __attribute_const__ kvm_target_cpu(void);int kvm_reset_vcpu (struct kvm_vcpu *vcpu);void kvm_arm_vcpu_destroy (struct kvm_vcpu *vcpu); +struct kvm_hyp_memcache { +phys_addr_t head; +unsigned long nr_pages; +}; + +static inline void push_hyp_memcache (struct kvm_hyp_memcache *mc, +phys_addr_t *p, +phys_addr_t (*to_pa)(void *virt)) +{ + *p = mc->head; + mc->head =to_pa (p); + mc->nr_pages++; +} + +static inline void *pop_hyp_memcache (struct kvm_hyp_memcache *mc, +void *(*to_va)(phys_addr_t phys)) +{ +phys_addr_t *p =to_va (mc->head); + +if (!mc->nr_pages) +return NULL ; + + mc->head = *p; + mc->nr_pages--; + +return p; +} + +static inline int __topup_hyp_memcache (struct kvm_hyp_memcache *mc, +unsigned long min_pages, +void *(*alloc_fn)(void *arg), +phys_addr_t (*to_pa)(void *virt), +void *arg) +{ +while (mc->nr_pages < min_pages) { +phys_addr_t *p =alloc_fn (arg); + +if (!p) +return -ENOMEM ; +push_hyp_memcache (mc, p, to_pa); + } + +return 0 ; +} + +static inline void __free_hyp_memcache (struct kvm_hyp_memcache *mc, +void (*free_fn)(void *virt,void *arg), +void *(*to_va)(phys_addr_t phys), +void *arg) +{ +while (mc->nr_pages) +free_fn (pop_hyp_memcache (mc, to_va), arg); +} + +void free_hyp_memcache (struct kvm_hyp_memcache *mc); +int topup_hyp_memcache (struct kvm_hyp_memcache *mc,unsigned long min_pages); +struct kvm_vmid {atomic64_t id; };
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +2 -0
@@ -77,6 +77,8 @@ void handle_host_mem_abort(struct kvm_cpu_context *host_ctxt);int hyp_pin_shared_mem (void *from,void *to);void hyp_unpin_shared_mem (void *from,void *to);void reclaim_guest_pages (struct pkvm_hyp_vm *vm); +int refill_memcache (struct kvm_hyp_memcache *mc,unsigned long min_pages, +struct kvm_hyp_memcache *host_mc); static __always_inline void __load_host_stage2(void) {
arch/arm64/kvm/hyp/nvhe/mm.c +33 -0
@@ -330,3 +330,36 @@ int hyp_create_idmap(u32 hyp_va_bits)return __pkvm_create_mappings (start, end - start, start,PAGE_HYP_EXEC ); } + +static void *admit_host_page (void *arg) +{ +struct kvm_hyp_memcache *host_mc = arg; + +if (!host_mc->nr_pages) +return NULL ; + +/* +* The host still owns the pages in its memcache, so we need to go +* through a full host-to-hyp donation cycle to change it. Fortunately, +* __pkvm_host_donate_hyp() takes care of races for us, so if it +* succeeds we're good to go. +*/ +if (__pkvm_host_donate_hyp (hyp_phys_to_pfn (host_mc->head),1 )) +return NULL ; + +return pop_hyp_memcache (host_mc, hyp_phys_to_virt); +} + +/* Refill our local memcache by poping pages from the one provided by the host. */ +int refill_memcache (struct kvm_hyp_memcache *mc,unsigned long min_pages, +struct kvm_hyp_memcache *host_mc) +{ +struct kvm_hyp_memcache tmp = *host_mc; +int ret; + + ret =__topup_hyp_memcache (mc, min_pages, admit_host_page, + hyp_virt_to_phys, &tmp); + *host_mc = tmp; + +return ret; +}
arch/arm64/kvm/mmu.c +26 -0
@@ -772,6 +772,32 @@ void kvm_free_stage2_pgd(struct kvm_s2_mmu *mmu) } } +static void hyp_mc_free_fn (void *addr,void *unused) +{ +free_page ((unsigned long )addr); +} + +static void *hyp_mc_alloc_fn (void *unused) +{ +return (void *)__get_free_page (GFP_KERNEL_ACCOUNT ); +} + +void free_hyp_memcache (struct kvm_hyp_memcache *mc) +{ +if (is_protected_kvm_enabled ()) +__free_hyp_memcache (mc, hyp_mc_free_fn, + kvm_host_va,NULL ); +} + +int topup_hyp_memcache (struct kvm_hyp_memcache *mc,unsigned long min_pages) +{ +if (!is_protected_kvm_enabled ()) +return 0 ; + +return __topup_hyp_memcache (mc, min_pages, hyp_mc_alloc_fn, + kvm_host_pa,NULL ); +} +/** * kvm_phys_addr_ioremap - map a device range to guest IPA *
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 18/25 KVM: arm64: Consolidate stage-2 initialisation into a single function
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
The initialisation of guest stage-2 page-tables is currently split across two functions: kvm_init_stage2_mmu() and kvm_arm_setup_stage2(). That is presumably for historical reasons as kvm_arm_setup_stage2() originates from the (now defunct) KVM port for 32-bit Arm.
Simplify this code path by merging both functions into one, taking care to map the 'struct kvm' into the hypervisor stage-1 early on in order to simplify the failure path.
--- arch/arm64/include/asm/kvm_arm.h | 2 +- arch/arm64/include/asm/kvm_host.h | 2 -- arch/arm64/include/asm/kvm_mmu.h | 2 +- arch/arm64/kvm/arm.c | 27 +++++++++++++-------------- arch/arm64/kvm/mmu.c | 27 ++++++++++++++++++++++++++- arch/arm64/kvm/reset.c | 29 ----------------------------- 6 files changed, 41 insertions(+), 48 deletions(-)
arch/arm64/include/asm/kvm_arm.h +1 -1
@@ -135,7 +135,7 @@* 40 bits wide (T0SZ = 24). Systems with a PARange smaller than 40 bits are * not known to exist and will break with this configuration. * -* The VTCR_EL2 is configured per VM and is initialised in kvm_arm_setup_stage2(). +* The VTCR_EL2 is configured per VM and is initialised in kvm_init_stage2_mmu. * * Note that when using 4K pages, we concatenate two first level page tables * together. With 16K pages, we concatenate 16 first level page tables.
arch/arm64/include/asm/kvm_host.h +0 -2
@@ -987,8 +987,6 @@ int kvm_set_ipa_limit(void);#define __KVM_HAVE_ARCH_VM_ALLOCstruct kvm *kvm_arch_alloc_vm (void ); -int kvm_arm_setup_stage2 (struct kvm *kvm,unsigned long type); -static inline bool kvm_vm_is_protected (struct kvm *kvm) {return false;
arch/arm64/include/asm/kvm_mmu.h +1 -1
@@ -165,7 +165,7 @@ int create_hyp_exec_mappings(phys_addr_t phys_addr, size_t size,void free_hyp_pgds (void );void stage2_unmap_vm (struct kvm *kvm); -int kvm_init_stage2_mmu (struct kvm *kvm,struct kvm_s2_mmu *mmu); +int kvm_init_stage2_mmu (struct kvm *kvm,struct kvm_s2_mmu *mmu,unsigned long type);void kvm_free_stage2_pgd (struct kvm_s2_mmu *mmu);int kvm_phys_addr_ioremap (struct kvm *kvm,phys_addr_t guest_ipa,phys_addr_t pa,unsigned long size,bool writable);
arch/arm64/kvm/arm.c +13 -14
@@ -139,28 +139,24 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type) {int ret; - ret =kvm_arm_setup_stage2 (kvm, type); -if (ret) -return ret; - - ret =kvm_init_stage2_mmu (kvm, &kvm->arch.mmu); -if (ret) -return ret; - ret =kvm_share_hyp (kvm, kvm +1 );if (ret) - goto out_free_stage2_pgd; +return ret; ret =pkvm_init_host_vm (kvm);if (ret) - goto out_free_stage2_pgd; + goto err_unshare_kvm;if (!zalloc_cpumask_var (&kvm->arch.supported_cpus,GFP_KERNEL )) { ret = -ENOMEM ; - goto out_free_stage2_pgd; + goto err_unshare_kvm; }cpumask_copy (kvm->arch.supported_cpus, cpu_possible_mask); + ret =kvm_init_stage2_mmu (kvm, &kvm->arch.mmu, type); +if (ret) + goto err_free_cpumask; +kvm_vgic_early_init (kvm);/* The maximum number of VCPUs is limited by the host's GIC model */
@@ -169,9 +165,12 @@ int kvm_arch_init_vm(struct kvm *kvm, unsigned long type)set_default_spectre (kvm);kvm_arm_init_hypercalls (kvm); -return ret; -out_free_stage2_pgd: -kvm_free_stage2_pgd (&kvm->arch.mmu); +return 0 ; + +err_free_cpumask: +free_cpumask_var (kvm->arch.supported_cpus); +err_unshare_kvm: +kvm_unshare_hyp (kvm, kvm +1 );return ret; }
arch/arm64/kvm/mmu.c +26 -1
@@ -640,15 +640,40 @@ static struct kvm_pgtable_mm_ops kvm_s2_mm_ops = {* kvm_init_stage2_mmu - Initialise a S2 MMU structure * @kvm: The pointer to the KVM structure * @mmu: The pointer to the s2 MMU structure +* @type: The machine type of the virtual machine * * Allocates only the stage-2 HW PGD level table(s). * Note we don't need locking here as this is only called when the VM is * created, which can only be done once. */ -int kvm_init_stage2_mmu (struct kvm *kvm,struct kvm_s2_mmu *mmu) +int kvm_init_stage2_mmu (struct kvm *kvm,struct kvm_s2_mmu *mmu,unsigned long type) { +u32 kvm_ipa_limit =get_kvm_ipa_limit ();int cpu, err;struct kvm_pgtable *pgt; +u64 mmfr0, mmfr1; +u32 phys_shift; + +if (type & ~KVM_VM_TYPE_ARM_IPA_SIZE_MASK ) +return -EINVAL ; + + phys_shift =KVM_VM_TYPE_ARM_IPA_SIZE (type); +if (phys_shift) { +if (phys_shift > kvm_ipa_limit || + phys_shift <ARM64_MIN_PARANGE_BITS ) +return -EINVAL ; + }else { + phys_shift =KVM_PHYS_SHIFT ; +if (phys_shift > kvm_ipa_limit) { +pr_warn_once ("%s using unsupported default IPA limit, upgrade your VMM\n" , + current->comm); +return -EINVAL ; + } + } + + mmfr0 =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 ); + mmfr1 =read_sanitised_ftr_reg (SYS_ID_AA64MMFR1_EL1 ); + kvm->arch.vtcr =kvm_get_vtcr (mmfr0, mmfr1, phys_shift);if (mmu->pgt !=NULL ) {kvm_err ("kvm_arch already initialized?\n" );
arch/arm64/kvm/reset.c +0 -29
@@ -395,32 +395,3 @@ int kvm_set_ipa_limit(void)return 0 ; } - -int kvm_arm_setup_stage2 (struct kvm *kvm,unsigned long type) -{ -u64 mmfr0, mmfr1; -u32 phys_shift; - -if (type & ~KVM_VM_TYPE_ARM_IPA_SIZE_MASK ) -return -EINVAL ; - - phys_shift =KVM_VM_TYPE_ARM_IPA_SIZE (type); -if (phys_shift) { -if (phys_shift > kvm_ipa_limit || - phys_shift <ARM64_MIN_PARANGE_BITS ) -return -EINVAL ; - }else { - phys_shift =KVM_PHYS_SHIFT ; -if (phys_shift > kvm_ipa_limit) { -pr_warn_once ("%s using unsupported default IPA limit, upgrade your VMM\n" , - current->comm); -return -EINVAL ; - } - } - - mmfr0 =read_sanitised_ftr_reg (SYS_ID_AA64MMFR0_EL1 ); - mmfr1 =read_sanitised_ftr_reg (SYS_ID_AA64MMFR1_EL1 ); - kvm->arch.vtcr =kvm_get_vtcr (mmfr0, mmfr1, phys_shift); - -return 0 ; -}
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 19/25 KVM: arm64: Instantiate guest stage-2 page-tables at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Extend the initialisation of guest data structures within the pKVM hypervisor at EL2 so that we instantiate a memory pool and a full 'struct kvm_s2_mmu' structure for each VM, with a stage-2 page-table entirely independent from the one managed by the host at EL1.
The 'struct kvm_pgtable_mm_ops' used by the page-table code is populated with a set of callbacks that can manage guest pages in the hypervisor without any direct intervention from the host, allocating page-table pages from the provided pool and returning these to the host on VM teardown. To keep things simple, the stage-2 MMU for the guest is configured identically to the host stage-2 in the VTCR register and so the IPA size of the guest must match the PA size of the host.
For now, the new page-table is unused as there is no way for the host to map anything into it. Yet.
--- arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 6 ++ arch/arm64/kvm/hyp/nvhe/mem_protect.c | 125 ++++++++++++++++++++++++- arch/arm64/kvm/mmu.c | 4 +- 3 files changed, 132 insertions(+), 3 deletions(-)
arch/arm64/kvm/hyp/include/nvhe/pkvm.h +6 -0
@@ -9,6 +9,9 @@#include <asm/kvm_pkvm.h> +#include <nvhe/gfp.h> +#include <nvhe/spinlock.h> +/* * Holds the relevant data for maintaining the vcpu state completely at hyp. */
@@ -36,6 +39,9 @@ struct pkvm_hyp_vm {/* The guest's stage-2 page-table managed by the hypervisor. */ struct kvm_pgtable pgt; +struct kvm_pgtable_mm_ops mm_ops; +struct hyp_pool pool; +hyp_spinlock_t lock;/* * The number of vcpus initialized and ready to run.
arch/arm64/kvm/hyp/nvhe/mem_protect.c +123 -2
147 lines not on this page · raw message
arch/arm64/kvm/mmu.c +3 -1
@@ -658,7 +658,9 @@ int kvm_init_stage2_mmu(struct kvm *kvm, struct kvm_s2_mmu *mmu, unsigned long treturn -EINVAL ; phys_shift =KVM_VM_TYPE_ARM_IPA_SIZE (type); -if (phys_shift) { +if (is_protected_kvm_enabled ()) { + phys_shift = kvm_ipa_limit; + }else if (phys_shift) {if (phys_shift > kvm_ipa_limit || phys_shift <ARM64_MIN_PARANGE_BITS )return -EINVAL ;
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 20/25 KVM: arm64: Return guest memory from EL2 via dedicated teardown memcache
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
Rather than relying on the host to free the previously-donated pKVM hypervisor VM pages explicitly on teardown, introduce a dedicated teardown memcache which allows the host to reclaim guest memory resources without having to keep track of all of the allocations made by the pKVM hypervisor at EL2.
--- arch/arm64/include/asm/kvm_host.h | 7 +---- arch/arm64/kvm/hyp/include/nvhe/mem_protect.h | 2 +- arch/arm64/kvm/hyp/nvhe/mem_protect.c | 17 ++++++---- arch/arm64/kvm/hyp/nvhe/pkvm.c | 20 ++++++++++-- arch/arm64/kvm/pkvm.c | 31 ++++--------------- 5 files changed, 36 insertions(+), 41 deletions(-)
arch/arm64/include/asm/kvm_host.h +1 -6
@@ -177,12 +177,7 @@ typedef unsigned int pkvm_handle_t;struct kvm_protected_vm {pkvm_handle_t handle;struct mutex vm_lock; - -struct { -void *pgd; -void *vm; -void *vcpus[KVM_MAX_VCPUS ]; - } hyp_donations; +struct kvm_hyp_memcache teardown_mc; };struct kvm_arch {
arch/arm64/kvm/hyp/include/nvhe/mem_protect.h +1 -1
@@ -76,7 +76,7 @@ void handle_host_mem_abort(struct kvm_cpu_context *host_ctxt);int hyp_pin_shared_mem (void *from,void *to);void hyp_unpin_shared_mem (void *from,void *to); -void reclaim_guest_pages (struct pkvm_hyp_vm *vm); +void reclaim_guest_pages (struct pkvm_hyp_vm *vm,struct kvm_hyp_memcache *mc);int refill_memcache (struct kvm_hyp_memcache *mc,unsigned long min_pages,struct kvm_hyp_memcache *host_mc);
arch/arm64/kvm/hyp/nvhe/mem_protect.c +11 -6
@@ -260,19 +260,24 @@ int kvm_guest_prepare_stage2(struct pkvm_hyp_vm *vm, void *pgd)return 0 ; } -void reclaim_guest_pages (struct pkvm_hyp_vm *vm) +void reclaim_guest_pages (struct pkvm_hyp_vm *vm,struct kvm_hyp_memcache *mc) { -void *pgd = vm->pgt.pgd; -unsigned long nr_pages; - - nr_pages =kvm_pgtable_stage2_pgd_size (vm->kvm.arch.vtcr) >>PAGE_SHIFT ; +void *addr; +/* Dump all pgtable pages in the hyp_pool */ guest_lock_component (vm);kvm_pgtable_stage2_destroy (&vm->pgt); vm->kvm.arch.mmu.pgd_phys =0ULL ;guest_unlock_component (vm); -WARN_ON (__pkvm_hyp_donate_host (hyp_virt_to_pfn (pgd), nr_pages)); +/* Drain the hyp_pool into the memcache */ + addr =hyp_alloc_pages (&vm->pool,0 ); +while (addr) { +memset (hyp_virt_to_page (addr),0 ,sizeof (struct hyp_page )); +push_hyp_memcache (mc, addr, hyp_virt_to_phys); +WARN_ON (__pkvm_hyp_donate_host (hyp_virt_to_pfn (addr),1 )); + addr =hyp_alloc_pages (&vm->pool,0 ); + } }int __pkvm_prot_finalize (void )
arch/arm64/kvm/hyp/nvhe/pkvm.c +17 -3
@@ -539,8 +539,21 @@ int __pkvm_init_vcpu(pkvm_handle_t handle, struct kvm_vcpu *host_vcpu,return ret; } +static void +teardown_donated_memory (struct kvm_hyp_memcache *mc,void *addr,size_t size) +{ + size =PAGE_ALIGN (size); +memset (addr,0 , size); + +for (void *start = addr; start < addr + size; start +=PAGE_SIZE ) +push_hyp_memcache (mc, start, hyp_virt_to_phys); + +unmap_donated_memory_noclear (addr, size); +} +int __pkvm_teardown_vm (pkvm_handle_t handle) { +struct kvm_hyp_memcache *mc;struct pkvm_hyp_vm *hyp_vm;unsigned int idx;int err;
@@ -563,7 +576,8 @@ int __pkvm_teardown_vm(pkvm_handle_t handle)hyp_spin_unlock (&vm_table_lock);/* Reclaim guest pages (including page-table pages) */ -reclaim_guest_pages (hyp_vm); + mc = &hyp_vm->host_kvm->arch.pkvm.teardown_mc; +reclaim_guest_pages (hyp_vm, mc);unpin_host_vcpus (hyp_vm->vcpus, hyp_vm->nr_vcpus);/* Push the metadata pages to the teardown memcache */
@@ -572,10 +586,10 @@ int __pkvm_teardown_vm(pkvm_handle_t handle)for (idx =0 ; idx < hyp_vm->nr_vcpus; ++idx) {struct pkvm_hyp_vcpu *hyp_vcpu = hyp_vm->vcpus[idx]; -unmap_donated_memory (hyp_vcpu,sizeof (*hyp_vcpu)); +teardown_donated_memory (mc, hyp_vcpu,sizeof (*hyp_vcpu)); } -unmap_donated_memory (hyp_vm, hyp_vm->donated_memory_size); +teardown_donated_memory (mc, hyp_vm, hyp_vm->donated_memory_size);return 0 ; err_unlock:
arch/arm64/kvm/pkvm.c +6 -25
@@ -147,8 +147,6 @@ static int __pkvm_create_hyp_vm(struct kvm *host_kvm) handle = ret; host_kvm->arch.pkvm.handle = handle; - host_kvm->arch.pkvm.hyp_donations.pgd = pgd; - host_kvm->arch.pkvm.hyp_donations.vm = hyp_vm;/* Donate memory for the vcpus at hyp and initialize it. */ hyp_vcpu_sz =PAGE_ALIGN (PKVM_HYP_VCPU_SIZE );
@@ -167,12 +165,12 @@ static int __pkvm_create_hyp_vm(struct kvm *host_kvm) goto destroy_vm; } - host_kvm->arch.pkvm.hyp_donations.vcpus[idx] = hyp_vcpu; - ret =kvm_call_hyp_nvhe (__pkvm_init_vcpu, handle, host_vcpu, hyp_vcpu); -if (ret) +if (ret) { +free_pages_exact (hyp_vcpu, hyp_vcpu_sz); goto destroy_vm; + } }return 0 ;
@@ -201,30 +199,13 @@ int pkvm_create_hyp_vm(struct kvm *host_kvm)void pkvm_destroy_hyp_vm (struct kvm *host_kvm) { -unsigned long idx, nr_vcpus = host_kvm->created_vcpus; -size_t pgd_sz, hyp_vm_sz; - -if (host_kvm->arch.pkvm.handle) +if (host_kvm->arch.pkvm.handle) {WARN_ON (kvm_call_hyp_nvhe (__pkvm_teardown_vm, host_kvm->arch.pkvm.handle)); - - host_kvm->arch.pkvm.handle =0 ; - -for (idx =0 ; idx < nr_vcpus; ++idx) { -void *hyp_vcpu = host_kvm->arch.pkvm.hyp_donations.vcpus[idx]; - -if (!hyp_vcpu) -break ; - -free_pages_exact (hyp_vcpu,PAGE_ALIGN (PKVM_HYP_VCPU_SIZE )); } - hyp_vm_sz =PAGE_ALIGN (size_add (PKVM_HYP_VM_SIZE , -size_mul (sizeof (void *), nr_vcpus))); - pgd_sz =kvm_pgtable_stage2_pgd_size (host_kvm->arch.vtcr); - -free_pages_exact (host_kvm->arch.pkvm.hyp_donations.vm, hyp_vm_sz); -free_pages_exact (host_kvm->arch.pkvm.hyp_donations.pgd, pgd_sz); + host_kvm->arch.pkvm.handle =0 ; +free_hyp_memcache (&host_kvm->arch.pkvm.teardown_mc); }int pkvm_init_host_vm (struct kvm *host_kvm)
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 21/25 KVM: arm64: Unmap 'kvm_arm_hyp_percpu_base' from the host
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
When pKVM is enabled, the hypervisor at EL2 does not trust the host at EL1 and must therefore prevent it from having unrestricted access to internal hypervisor state.
The 'kvm_arm_hyp_percpu_base' array holds the offsets for hypervisor per-cpu allocations, so move this this into the nVHE code where it cannot be modified by the untrusted host at EL1.
--- arch/arm64/include/asm/kvm_asm.h | 4 ++-- arch/arm64/kernel/image-vars.h | 3 --- arch/arm64/kvm/arm.c | 9 ++++----- arch/arm64/kvm/hyp/nvhe/hyp-smp.c | 2 ++ 4 files changed, 8 insertions(+), 10 deletions(-)
arch/arm64/include/asm/kvm_asm.h +2 -2
@@ -109,7 +109,7 @@ enum __kvm_host_smccc_func {#define per_cpu_ptr_nvhe_sym (sym, cpu) \ ({ \ unsigned long base, off; \ - base = kvm_arm_hyp_percpu_base[cpu]; \ + base = kvm_nvhe_sym(kvm_arm_hyp_percpu_base)[cpu]; \ off = (unsigned long)&CHOOSE_NVHE_SYM(sym) - \ (unsigned long)&CHOOSE_NVHE_SYM(__per_cpu_start); \ base ? (typeof(CHOOSE_NVHE_SYM(sym))*)(base + off) : NULL; \
@@ -214,7 +214,7 @@ DECLARE_KVM_HYP_SYM(__kvm_hyp_vector);#define __kvm_hyp_init CHOOSE_NVHE_SYM(__kvm_hyp_init)#define __kvm_hyp_vector CHOOSE_HYP_SYM(__kvm_hyp_vector) -extern unsigned long kvm_arm_hyp_percpu_base[NR_CPUS ]; +extern unsigned long kvm_nvhe_sym (kvm_arm_hyp_percpu_base )[];DECLARE_KVM_NVHE_SYM (__per_cpu_start);DECLARE_KVM_NVHE_SYM (__per_cpu_end);
arch/arm64/kernel/image-vars.h +0 -3
@@ -105,9 +105,6 @@ KVM_NVHE_ALIAS(gic_nonsecure_priorities);KVM_NVHE_ALIAS (__start___kvm_ex_table);KVM_NVHE_ALIAS (__stop___kvm_ex_table); -/* Array containing bases of nVHE per-CPU memory regions. */ -KVM_NVHE_ALIAS (kvm_arm_hyp_percpu_base); -/* PMU available static key */ #ifdef CONFIG_HW_PERF_EVENTS KVM_NVHE_ALIAS (kvm_arm_pmu_available);
arch/arm64/kvm/arm.c +4 -5
@@ -51,7 +51,6 @@ DEFINE_STATIC_KEY_FALSE(kvm_protected_mode_initialized); DECLARE_KVM_HYP_PER_CPU(unsigned long, kvm_hyp_vector); DEFINE_PER_CPU(unsigned long, kvm_arm_hyp_stack_page); -unsigned long kvm_arm_hyp_percpu_base[NR_CPUS ]; DECLARE_KVM_NVHE_PER_CPU(struct kvm_nvhe_init_params, kvm_init_params);static bool vgic_present;
@@ -1859,13 +1858,13 @@ static void teardown_hyp_mode(void)free_hyp_pgds ();for_each_possible_cpu (cpu) {free_page (per_cpu (kvm_arm_hyp_stack_page, cpu)); -free_pages (kvm_arm_hyp_percpu_base[cpu],nvhe_percpu_order ()); +free_pages (kvm_nvhe_sym (kvm_arm_hyp_percpu_base)[cpu],nvhe_percpu_order ()); } }static int do_pkvm_init (u32 hyp_va_bits) { -void *per_cpu_base =kvm_ksym_ref (kvm_arm_hyp_percpu_base); +void *per_cpu_base =kvm_ksym_ref (kvm_nvhe_sym (kvm_arm_hyp_percpu_base));int ret;preempt_disable ();
@@ -1969,7 +1968,7 @@ static int init_hyp_mode(void) page_addr =page_address (page);memcpy (page_addr,CHOOSE_NVHE_SYM (__per_cpu_start),nvhe_percpu_size ()); - kvm_arm_hyp_percpu_base[cpu] = (unsigned long )page_addr; +kvm_nvhe_sym (kvm_arm_hyp_percpu_base)[cpu] = (unsigned long )page_addr; }/*
@@ -2062,7 +2061,7 @@ static int init_hyp_mode(void) }for_each_possible_cpu (cpu) { -char *percpu_begin = (char *)kvm_arm_hyp_percpu_base[cpu]; +char *percpu_begin = (char *)kvm_nvhe_sym (kvm_arm_hyp_percpu_base)[cpu];char *percpu_end = percpu_begin +nvhe_percpu_size ();/* Map Hyp percpu pages */
arch/arm64/kvm/hyp/nvhe/hyp-smp.c +2 -0
@@ -23,6 +23,8 @@ u64 cpu_logical_map(unsigned int cpu)return hyp_cpu_logical_map[cpu]; } +unsigned long __ro_after_init kvm_arm_hyp_percpu_base[NR_CPUS ]; +unsigned long __hyp_per_cpu_offset (unsigned int cpu) {unsigned long *cpu_base_array;
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 22/25 KVM: arm64: Maintain a copy of 'kvm_arm_vmid_bits' at EL2
In reply to Will DeaconSharing 'kvm_arm_vmid_bits' between EL1 and EL2 allows the host to modify the variable arbitrarily, potentially leading to all sorts of shenanians as this is used to configure the VTTBR register for the guest stage-2.
In preparation for unmapping host sections entirely from EL2, maintain a copy of 'kvm_arm_vmid_bits' in the pKVM hypervisor and initialise it from the host value while it is still trusted.
--- arch/arm64/include/asm/kvm_hyp.h | 2 ++ arch/arm64/kernel/image-vars.h | 3 --- arch/arm64/kvm/arm.c | 1 + arch/arm64/kvm/hyp/nvhe/pkvm.c | 3 +++ 4 files changed, 6 insertions(+), 3 deletions(-)
arch/arm64/include/asm/kvm_hyp.h +2 -0
@@ -124,4 +124,6 @@ extern u64 kvm_nvhe_sym(id_aa64mmfr1_el1_sys_val);extern u64 kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val );extern unsigned long kvm_nvhe_sym (__icache_flags ); +extern unsigned int kvm_nvhe_sym (kvm_arm_vmid_bits ); +#endif /* __ARM64_KVM_HYP_H__ */
arch/arm64/kernel/image-vars.h +0 -3
@@ -83,9 +83,6 @@ KVM_NVHE_ALIAS(nvhe_hyp_panic_handler);/* Vectors installed by hyp-init on reset HVC. */ KVM_NVHE_ALIAS (__hyp_stub_vectors); -/* VMID bits set by the KVM VMID allocator */ -KVM_NVHE_ALIAS (kvm_arm_vmid_bits); -/* Kernel symbols needed for cpus_have_final/const_caps checks. */ KVM_NVHE_ALIAS (arm64_const_caps_ready);KVM_NVHE_ALIAS (cpu_hwcap_keys);
arch/arm64/kvm/arm.c +1 -0
@@ -1895,6 +1895,7 @@ static void kvm_hyp_init_symbols(void)kvm_nvhe_sym (id_aa64mmfr1_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR1_EL1 );kvm_nvhe_sym (id_aa64mmfr2_el1_sys_val) =read_sanitised_ftr_reg (SYS_ID_AA64MMFR2_EL1 );kvm_nvhe_sym (__icache_flags) = __icache_flags; +kvm_nvhe_sym (kvm_arm_vmid_bits) = kvm_arm_vmid_bits; }static int kvm_hyp_init_protection (u32 hyp_va_bits)
arch/arm64/kvm/hyp/nvhe/pkvm.c +3 -0
@@ -15,6 +15,9 @@/* Used by icache_is_vpipt(). */ unsigned long __icache_flags; +/* Used by kvm_get_vttbr(). */ +unsigned int kvm_arm_vmid_bits; +/* * Set trap register values based on features in ID_AA64PFR0. */
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 23/25 KVM: arm64: Explicitly map 'kvm_vgic_global_state' at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
The pkvm hypervisor at EL2 may need to read the 'kvm_vgic_global_state' variable from the host, for example when saving and restoring the state of the virtual GIC.
Explicitly map 'kvm_vgic_global_state' in the stage-1 page-table of the pKVM hypervisor rather than relying on mapping all of the host '.rodata' section.
--- arch/arm64/kvm/hyp/nvhe/setup.c | 5 +++++ 1 file changed, 5 insertions(+)
arch/arm64/kvm/hyp/nvhe/setup.c +5 -0
@@ -161,6 +161,11 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size,if (ret)return ret; + ret =pkvm_create_mappings (&kvm_vgic_global_state, + &kvm_vgic_global_state +1 , prot); +if (ret) +return ret; +return 0 ; }
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerPATCH v3 24/25 KVM: arm64: Don't unnecessarily map host kernel sections at EL2
In reply to Will DeaconFrom: Quentin Perret <[email protected]>
We no longer need to map the host's '.rodata' and '.bss' sections in the stage-1 page-table of the pKVM hypervisor at EL2, so remove those mappings and avoid creating any future dependencies at EL2 on host-controlled data structures.
--- arch/arm64/kernel/image-vars.h | 6 ------ arch/arm64/kvm/hyp/nvhe/setup.c | 14 +++----------- 2 files changed, 3 insertions(+), 17 deletions(-)
arch/arm64/kernel/image-vars.h +0 -6
@@ -118,12 +118,6 @@ KVM_NVHE_ALIAS_HYP(__memcpy, __pi_memcpy);KVM_NVHE_ALIAS_HYP (__memset, __pi_memset);#endif -/* Kernel memory sections */ -KVM_NVHE_ALIAS (__start_rodata); -KVM_NVHE_ALIAS (__end_rodata); -KVM_NVHE_ALIAS (__bss_start); -KVM_NVHE_ALIAS (__bss_stop); -/* Hyp memory sections */ KVM_NVHE_ALIAS (__hyp_idmap_text_start);KVM_NVHE_ALIAS (__hyp_idmap_text_end);
arch/arm64/kvm/hyp/nvhe/setup.c +3 -11
@@ -144,23 +144,15 @@ static int recreate_hyp_mappings(phys_addr_t phys, unsigned long size, }/* -* Map the host's .bss and .rodata sections RO in the hypervisor, but -* transfer the ownership from the host to the hypervisor itself to -* make sure it can't be donated or shared with another entity. +* Map the host sections RO in the hypervisor, but transfer the +* ownership from the host to the hypervisor itself to make sure they +* can't be donated or shared with another entity. * * The ownership transition requires matching changes in the host * stage-2. This will be done later (see finalize_host_mappings()) once * the hyp_vmemmap is addressable. */ prot =pkvm_mkstate (PAGE_HYP_RO ,PKVM_PAGE_SHARED_OWNED ); - ret =pkvm_create_mappings (__start_rodata, __end_rodata, prot); -if (ret) -return ret; - - ret =pkvm_create_mappings (__hyp_bss_end, __bss_stop, prot); -if (ret) -return ret; - ret =pkvm_create_mappings (&kvm_vgic_global_state, &kvm_vgic_global_state +1 , prot);if (ret)
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Will Deacon
maintainerRFC PATCH v3 25/25 KVM: arm64: Use the pKVM hyp vCPU structure in handle___kvm_vcpu_run()
In reply to Will DeaconAs a stepping stone towards deprivileging the host's access to the guest's vCPU structures, introduce some naive flush/sync routines to copy most of the host vCPU into the hyp vCPU on vCPU run and back again on return to EL1.
This allows us to run using the pKVM hyp structures when KVM is initialised in protected mode.
--- arch/arm64/kvm/hyp/include/nvhe/pkvm.h | 4 ++ arch/arm64/kvm/hyp/nvhe/hyp-main.c | 79 +++++++++++++++++++++++++- arch/arm64/kvm/hyp/nvhe/pkvm.c | 28 +++++++++ 3 files changed, 109 insertions(+), 2 deletions(-)
arch/arm64/kvm/hyp/include/nvhe/pkvm.h +4 -0
@@ -67,4 +67,8 @@ int __pkvm_init_vcpu(pkvm_handle_t handle, struct kvm_vcpu *host_vcpu, unsigned long vcpu_hva);int __pkvm_teardown_vm (pkvm_handle_t handle); +struct pkvm_hyp_vcpu *pkvm_load_hyp_vcpu (pkvm_handle_t handle, +unsigned int vcpu_idx); +void pkvm_put_hyp_vcpu (struct pkvm_hyp_vcpu *hyp_vcpu); +#endif /* __ARM64_KVM_NVHE_PKVM_H__ */
arch/arm64/kvm/hyp/nvhe/hyp-main.c +77 -2
88 lines not on this page · raw message
arch/arm64/kvm/hyp/nvhe/pkvm.c +28 -0
@@ -241,6 +241,33 @@ static struct pkvm_hyp_vm *get_vm_by_handle(pkvm_handle_t handle)return vm_table[idx]; } +struct pkvm_hyp_vcpu *pkvm_load_hyp_vcpu (pkvm_handle_t handle, +unsigned int vcpu_idx) +{ +struct pkvm_hyp_vcpu *hyp_vcpu =NULL ; +struct pkvm_hyp_vm *hyp_vm; + +hyp_spin_lock (&vm_table_lock); + hyp_vm =get_vm_by_handle (handle); +if (!hyp_vm || hyp_vm->nr_vcpus <= vcpu_idx) + goto unlock; + + hyp_vcpu = hyp_vm->vcpus[vcpu_idx]; +hyp_page_ref_inc (hyp_virt_to_page (hyp_vm)); +unlock: +hyp_spin_unlock (&vm_table_lock); +return hyp_vcpu; +} + +void pkvm_put_hyp_vcpu (struct pkvm_hyp_vcpu *hyp_vcpu) +{ +struct pkvm_hyp_vm *hyp_vm =pkvm_hyp_vcpu_to_hyp_vm (hyp_vcpu); + +hyp_spin_lock (&vm_table_lock); +hyp_page_ref_dec (hyp_virt_to_page (hyp_vm)); +hyp_spin_unlock (&vm_table_lock); +} +static void unpin_host_vcpu (struct kvm_vcpu *host_vcpu) {if (host_vcpu)
@@ -286,6 +313,7 @@ static int init_pkvm_hyp_vcpu(struct pkvm_hyp_vcpu *hyp_vcpu, hyp_vcpu->vcpu.vcpu_idx = vcpu_idx; hyp_vcpu->vcpu.arch.hw_mmu = &hyp_vm->kvm.arch.mmu; + hyp_vcpu->vcpu.arch.cflags =READ_ONCE (host_vcpu->arch.cflags); done:if (ret)unpin_host_vcpu (host_vcpu);
Signature · 6 lines
2.37.2.789.g6183377224-goog _______________________________________________ kvmarm mailing list [email protected] https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
Quoted 37 lines · Will Deacon
Hi folks,
This is v3 of the series previously posted here:
Mega-series: https://lore.kernel.org/kvmarm/[email protected]/
v2: https://lore.kernel.org/all/[email protected]/There have been some significant changes since v2, including:
- Removal of unnecessary backpointer linking a hyp vCPU to its hyp VM in favour of
container_of()- Removing confusing use of 'shadow' at EL2 in favour of '
pkvm_hyp' (although this was much more work than a simple sed expression!)- Simplified vm table lookup and removal of redundant table traversal
- Rework of the hypervisor fixmap to avoid redundant page-table walks
- Splitting of memory donations required to create a guest so that the requirement for physically-contiguous pages is reduced
- Fixed a memory leak when the stage-2 pgd is configured with an unsupported size
- Dropped rework of 'struct
hyp_page' as it is not required by this series- Improved commit messages
- Rebased onto v6.0-rc1
Oliver -- as discussed in person, I've left the owner ID enumeration where it is for now since we will need to track the guest *instance* in future and so consolidating this into the pgtable code is unlikely to be beneficial.
Quoted 7 lines
As with the previous posting, the last patch is marked as RFC because, although it plumbs in the shadow state, it is woefully inefficient and copies to/from the host state on every vCPU run. Without the last patch, the new structures are unused but we move considerably closer to isolating guests from the host.
Cheers,
Tested on silicon, especially that all the donations are recovered on VM teardown.
[...]
_______________________________________________
kvmarm mailing list
[email protected]
https://lists.cs.columbia.edu/mailman/listinfo/kvmarm