Snap for 11021610 from dfa24ec9dd to android13-5.15-keystone-qcom-release
Change-Id: Id994d1dce7763152c61f5ffc61786c0febcffce1
This commit is contained in:
@@ -580,3 +580,33 @@ Date: January 2022
|
|||||||
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
Description: Controls max # of node block writes to be used for roll forward
|
Description: Controls max # of node block writes to be used for roll forward
|
||||||
recovery. This can limit the roll forward recovery time.
|
recovery. This can limit the roll forward recovery time.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/unusable_blocks_per_sec
|
||||||
|
Date: June 2022
|
||||||
|
Contact: "Jaegeuk Kim" <jaegeuk@kernel.org>
|
||||||
|
Description: Shows the number of unusable blocks in a section which was defined by
|
||||||
|
the zone capacity reported by underlying zoned device.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/current_atomic_write
|
||||||
|
Date: July 2022
|
||||||
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
Description: Show the total current atomic write block count, which is not committed yet.
|
||||||
|
This is a read-only entry.
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/peak_atomic_write
|
||||||
|
Date: July 2022
|
||||||
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
Description: Show the peak value of total current atomic write block count after boot.
|
||||||
|
If you write "0" here, you can initialize to "0".
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/committed_atomic_block
|
||||||
|
Date: July 2022
|
||||||
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
Description: Show the accumulated total committed atomic write block count after boot.
|
||||||
|
If you write "0" here, you can initialize to "0".
|
||||||
|
|
||||||
|
What: /sys/fs/f2fs/<disk>/revoked_atomic_block
|
||||||
|
Date: July 2022
|
||||||
|
Contact: "Daeho Jeong" <daehojeong@google.com>
|
||||||
|
Description: Show the accumulated total revoked atomic write block count after boot.
|
||||||
|
If you write "0" here, you can initialize to "0".
|
||||||
|
|||||||
@@ -123,3 +123,11 @@ Other examples (per target):
|
|||||||
0 1638400 verity 1 8:1 8:2 4096 4096 204800 1 sha256
|
0 1638400 verity 1 8:1 8:2 4096 4096 204800 1 sha256
|
||||||
fb1a5a0f00deb908d8b53cb270858975e76cf64105d412ce764225d53b8f3cfd
|
fb1a5a0f00deb908d8b53cb270858975e76cf64105d412ce764225d53b8f3cfd
|
||||||
51934789604d1b92399c52e7cb149d1b3a1b74bbbcb103b2a0aaacbed5c08584
|
51934789604d1b92399c52e7cb149d1b3a1b74bbbcb103b2a0aaacbed5c08584
|
||||||
|
|
||||||
|
For setups using device-mapper on top of asynchronously probed block
|
||||||
|
devices (MMC, USB, ..), it may be necessary to tell dm-init to
|
||||||
|
explicitly wait for them to become available before setting up the
|
||||||
|
device-mapper tables. This can be done with the "dm-mod.waitfor="
|
||||||
|
module parameter, which takes a list of devices to wait for::
|
||||||
|
|
||||||
|
dm-mod.waitfor=<device1>[,..,<deviceN>]
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ information and return operation results::
|
|||||||
struct args_ismountpoint ismountpoint;
|
struct args_ismountpoint ismountpoint;
|
||||||
};
|
};
|
||||||
|
|
||||||
char path[0];
|
char path[];
|
||||||
};
|
};
|
||||||
|
|
||||||
The ioctlfd field is a mount point file descriptor of an autofs mount
|
The ioctlfd field is a mount point file descriptor of an autofs mount
|
||||||
|
|||||||
@@ -467,7 +467,7 @@ Each ioctl is passed a pointer to an `autofs_dev_ioctl` structure::
|
|||||||
struct args_ismountpoint ismountpoint;
|
struct args_ismountpoint ismountpoint;
|
||||||
};
|
};
|
||||||
|
|
||||||
char path[0];
|
char path[];
|
||||||
};
|
};
|
||||||
|
|
||||||
For the **OPEN_MOUNT** and **IS_MOUNTPOINT** commands, the target
|
For the **OPEN_MOUNT** and **IS_MOUNTPOINT** commands, the target
|
||||||
|
|||||||
@@ -22,12 +22,11 @@ exclusive.
|
|||||||
3) object removal. Locking rules: caller locks parent, finds victim,
|
3) object removal. Locking rules: caller locks parent, finds victim,
|
||||||
locks victim and calls the method. Locks are exclusive.
|
locks victim and calls the method. Locks are exclusive.
|
||||||
|
|
||||||
4) rename() that is _not_ cross-directory. Locking rules: caller locks
|
4) rename() that is _not_ cross-directory. Locking rules: caller locks the
|
||||||
the parent and finds source and target. In case of exchange (with
|
parent and finds source and target. We lock both (provided they exist). If we
|
||||||
RENAME_EXCHANGE in flags argument) lock both. In any case,
|
need to lock two inodes of different type (dir vs non-dir), we lock directory
|
||||||
if the target already exists, lock it. If the source is a non-directory,
|
first. If we need to lock two inodes of the same type, lock them in inode
|
||||||
lock it. If we need to lock both, lock them in inode pointer order.
|
pointer order. Then call the method. All locks are exclusive.
|
||||||
Then call the method. All locks are exclusive.
|
|
||||||
NB: we might get away with locking the source (and target in exchange
|
NB: we might get away with locking the source (and target in exchange
|
||||||
case) shared.
|
case) shared.
|
||||||
|
|
||||||
@@ -44,15 +43,17 @@ All locks are exclusive.
|
|||||||
rules:
|
rules:
|
||||||
|
|
||||||
* lock the filesystem
|
* lock the filesystem
|
||||||
* lock parents in "ancestors first" order.
|
* lock parents in "ancestors first" order. If one is not ancestor of
|
||||||
|
the other, lock them in inode pointer order.
|
||||||
* find source and target.
|
* find source and target.
|
||||||
* if old parent is equal to or is a descendent of target
|
* if old parent is equal to or is a descendent of target
|
||||||
fail with -ENOTEMPTY
|
fail with -ENOTEMPTY
|
||||||
* if new parent is equal to or is a descendent of source
|
* if new parent is equal to or is a descendent of source
|
||||||
fail with -ELOOP
|
fail with -ELOOP
|
||||||
* If it's an exchange, lock both the source and the target.
|
* Lock both the source and the target provided they exist. If we
|
||||||
* If the target exists, lock it. If the source is a non-directory,
|
need to lock two inodes of different type (dir vs non-dir), we lock
|
||||||
lock it. If we need to lock both, do so in inode pointer order.
|
the directory first. If we need to lock two inodes of the same type,
|
||||||
|
lock them in inode pointer order.
|
||||||
* call the method.
|
* call the method.
|
||||||
|
|
||||||
All ->i_rwsem are taken exclusive. Again, we might get away with locking
|
All ->i_rwsem are taken exclusive. Again, we might get away with locking
|
||||||
@@ -66,8 +67,9 @@ If no directory is its own ancestor, the scheme above is deadlock-free.
|
|||||||
|
|
||||||
Proof:
|
Proof:
|
||||||
|
|
||||||
First of all, at any moment we have a partial ordering of the
|
First of all, at any moment we have a linear ordering of the
|
||||||
objects - A < B iff A is an ancestor of B.
|
objects - A < B iff (A is an ancestor of B) or (B is not an ancestor
|
||||||
|
of A and ptr(A) < ptr(B)).
|
||||||
|
|
||||||
That ordering can change. However, the following is true:
|
That ordering can change. However, the following is true:
|
||||||
|
|
||||||
|
|||||||
@@ -433,6 +433,15 @@ start N bytes into the buffer leaving the first N bytes for the
|
|||||||
application to use. The final option is the flags field, but it will
|
application to use. The final option is the flags field, but it will
|
||||||
be dealt with in separate sections for each UMEM flag.
|
be dealt with in separate sections for each UMEM flag.
|
||||||
|
|
||||||
|
SO_BINDTODEVICE setsockopt
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
This is a generic SOL_SOCKET option that can be used to tie AF_XDP
|
||||||
|
socket to a particular network interface. It is useful when a socket
|
||||||
|
is created by a privileged process and passed to a non-privileged one.
|
||||||
|
Once the option is set, kernel will refuse attempts to bind that socket
|
||||||
|
to a different interface. Updating the value requires CAP_NET_RAW.
|
||||||
|
|
||||||
XDP_STATISTICS getsockopt
|
XDP_STATISTICS getsockopt
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
||||||
|
|||||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
|||||||
# SPDX-License-Identifier: GPL-2.0
|
# SPDX-License-Identifier: GPL-2.0
|
||||||
VERSION = 5
|
VERSION = 5
|
||||||
PATCHLEVEL = 15
|
PATCHLEVEL = 15
|
||||||
SUBLEVEL = 119
|
SUBLEVEL = 123
|
||||||
EXTRAVERSION =
|
EXTRAVERSION =
|
||||||
NAME = Trick or Treat
|
NAME = Trick or Treat
|
||||||
|
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -162,6 +162,7 @@
|
|||||||
clk_register
|
clk_register
|
||||||
clk_register_composite
|
clk_register_composite
|
||||||
clk_round_rate
|
clk_round_rate
|
||||||
|
clk_set_max_rate
|
||||||
clk_set_min_rate
|
clk_set_min_rate
|
||||||
clk_set_parent
|
clk_set_parent
|
||||||
clk_set_rate
|
clk_set_rate
|
||||||
@@ -1023,6 +1024,7 @@
|
|||||||
kill_block_super
|
kill_block_super
|
||||||
kill_fasync
|
kill_fasync
|
||||||
kill_pid
|
kill_pid
|
||||||
|
kimage_vaddr
|
||||||
kimage_voffset
|
kimage_voffset
|
||||||
__kmalloc
|
__kmalloc
|
||||||
kmalloc_caches
|
kmalloc_caches
|
||||||
@@ -1082,6 +1084,7 @@
|
|||||||
led_trigger_unregister_simple
|
led_trigger_unregister_simple
|
||||||
__list_add_valid
|
__list_add_valid
|
||||||
__list_del_entry_valid
|
__list_del_entry_valid
|
||||||
|
list_sort
|
||||||
ll_rw_block
|
ll_rw_block
|
||||||
load_nls
|
load_nls
|
||||||
load_nls_default
|
load_nls_default
|
||||||
@@ -1902,6 +1905,7 @@
|
|||||||
syscon_node_to_regmap
|
syscon_node_to_regmap
|
||||||
syscon_regmap_lookup_by_phandle
|
syscon_regmap_lookup_by_phandle
|
||||||
sysctl_sched_latency
|
sysctl_sched_latency
|
||||||
|
sysfs_create_bin_file
|
||||||
sysfs_create_file_ns
|
sysfs_create_file_ns
|
||||||
sysfs_create_group
|
sysfs_create_group
|
||||||
sysfs_create_link
|
sysfs_create_link
|
||||||
@@ -1949,6 +1953,7 @@
|
|||||||
__traceiter_android_rvh_check_preempt_tick
|
__traceiter_android_rvh_check_preempt_tick
|
||||||
__traceiter_android_rvh_check_preempt_wakeup
|
__traceiter_android_rvh_check_preempt_wakeup
|
||||||
__traceiter_android_rvh_do_sea
|
__traceiter_android_rvh_do_sea
|
||||||
|
__traceiter_android_rvh_do_undefinstr
|
||||||
__traceiter_android_rvh_enqueue_task
|
__traceiter_android_rvh_enqueue_task
|
||||||
__traceiter_android_rvh_gic_v3_set_affinity
|
__traceiter_android_rvh_gic_v3_set_affinity
|
||||||
__traceiter_android_rvh_iommu_setup_dma_ops
|
__traceiter_android_rvh_iommu_setup_dma_ops
|
||||||
@@ -1972,6 +1977,8 @@
|
|||||||
__traceiter_android_vh_mmc_sd_update_dataline_timing
|
__traceiter_android_vh_mmc_sd_update_dataline_timing
|
||||||
__traceiter_android_vh_rmqueue
|
__traceiter_android_vh_rmqueue
|
||||||
__traceiter_android_vh_sched_show_task
|
__traceiter_android_vh_sched_show_task
|
||||||
|
__traceiter_android_vh_set_module_permit_after_init
|
||||||
|
__traceiter_android_vh_xhci_urb_suitable_bypass
|
||||||
__traceiter_gpu_mem_total
|
__traceiter_gpu_mem_total
|
||||||
__traceiter_irq_handler_entry
|
__traceiter_irq_handler_entry
|
||||||
__traceiter_irq_handler_exit
|
__traceiter_irq_handler_exit
|
||||||
@@ -1985,6 +1992,7 @@
|
|||||||
__tracepoint_android_rvh_check_preempt_tick
|
__tracepoint_android_rvh_check_preempt_tick
|
||||||
__tracepoint_android_rvh_check_preempt_wakeup
|
__tracepoint_android_rvh_check_preempt_wakeup
|
||||||
__tracepoint_android_rvh_do_sea
|
__tracepoint_android_rvh_do_sea
|
||||||
|
__tracepoint_android_rvh_do_undefinstr
|
||||||
__tracepoint_android_rvh_enqueue_task
|
__tracepoint_android_rvh_enqueue_task
|
||||||
__tracepoint_android_rvh_gic_v3_set_affinity
|
__tracepoint_android_rvh_gic_v3_set_affinity
|
||||||
__tracepoint_android_rvh_iommu_setup_dma_ops
|
__tracepoint_android_rvh_iommu_setup_dma_ops
|
||||||
@@ -2008,6 +2016,8 @@
|
|||||||
__tracepoint_android_vh_mmc_sd_update_dataline_timing
|
__tracepoint_android_vh_mmc_sd_update_dataline_timing
|
||||||
__tracepoint_android_vh_rmqueue
|
__tracepoint_android_vh_rmqueue
|
||||||
__tracepoint_android_vh_sched_show_task
|
__tracepoint_android_vh_sched_show_task
|
||||||
|
__tracepoint_android_vh_set_module_permit_after_init
|
||||||
|
__tracepoint_android_vh_xhci_urb_suitable_bypass
|
||||||
__tracepoint_gpu_mem_total
|
__tracepoint_gpu_mem_total
|
||||||
__tracepoint_irq_handler_entry
|
__tracepoint_irq_handler_entry
|
||||||
__tracepoint_irq_handler_exit
|
__tracepoint_irq_handler_exit
|
||||||
|
|||||||
@@ -794,6 +794,7 @@
|
|||||||
fwnode_property_read_string
|
fwnode_property_read_string
|
||||||
fwnode_property_read_u32_array
|
fwnode_property_read_u32_array
|
||||||
fwnode_property_read_u64_array
|
fwnode_property_read_u64_array
|
||||||
|
fwnode_typec_mux_get
|
||||||
g_audio_cleanup
|
g_audio_cleanup
|
||||||
g_audio_setup
|
g_audio_setup
|
||||||
gcd
|
gcd
|
||||||
@@ -2191,10 +2192,13 @@
|
|||||||
tty_unregister_ldisc
|
tty_unregister_ldisc
|
||||||
tty_write_room
|
tty_write_room
|
||||||
typec_mux_get_drvdata
|
typec_mux_get_drvdata
|
||||||
|
typec_mux_put
|
||||||
typec_mux_register
|
typec_mux_register
|
||||||
typec_mux_set
|
typec_mux_set
|
||||||
typec_mux_unregister
|
typec_mux_unregister
|
||||||
typec_partner_set_identity
|
typec_partner_set_identity
|
||||||
|
typec_partner_set_pd_revision
|
||||||
|
typec_partner_set_svdm_version
|
||||||
typec_register_partner
|
typec_register_partner
|
||||||
typec_register_port
|
typec_register_port
|
||||||
typec_set_data_role
|
typec_set_data_role
|
||||||
|
|||||||
@@ -434,6 +434,7 @@
|
|||||||
__traceiter_android_vh_madvise_cold_or_pageout_abort
|
__traceiter_android_vh_madvise_cold_or_pageout_abort
|
||||||
__traceiter_android_vh_mark_page_accessed
|
__traceiter_android_vh_mark_page_accessed
|
||||||
__traceiter_android_vh_mem_cgroup_alloc
|
__traceiter_android_vh_mem_cgroup_alloc
|
||||||
|
__traceiter_android_vh_adjust_alloc_flags
|
||||||
__traceiter_android_vh_mem_cgroup_css_offline
|
__traceiter_android_vh_mem_cgroup_css_offline
|
||||||
__traceiter_android_vh_mem_cgroup_css_online
|
__traceiter_android_vh_mem_cgroup_css_online
|
||||||
__traceiter_android_vh_mem_cgroup_free
|
__traceiter_android_vh_mem_cgroup_free
|
||||||
@@ -453,6 +454,7 @@
|
|||||||
__traceiter_android_vh_print_slabinfo_header
|
__traceiter_android_vh_print_slabinfo_header
|
||||||
__traceiter_android_vh_record_mutex_lock_starttime
|
__traceiter_android_vh_record_mutex_lock_starttime
|
||||||
__traceiter_android_vh_record_pcpu_rwsem_starttime
|
__traceiter_android_vh_record_pcpu_rwsem_starttime
|
||||||
|
__traceiter_android_vh_percpu_rwsem_wq_add
|
||||||
__traceiter_android_vh_record_rtmutex_lock_starttime
|
__traceiter_android_vh_record_rtmutex_lock_starttime
|
||||||
__traceiter_android_vh_record_rwsem_lock_starttime
|
__traceiter_android_vh_record_rwsem_lock_starttime
|
||||||
__traceiter_android_vh_rmqueue
|
__traceiter_android_vh_rmqueue
|
||||||
@@ -561,6 +563,7 @@
|
|||||||
__tracepoint_android_vh_madvise_cold_or_pageout_abort
|
__tracepoint_android_vh_madvise_cold_or_pageout_abort
|
||||||
__tracepoint_android_vh_mark_page_accessed
|
__tracepoint_android_vh_mark_page_accessed
|
||||||
__tracepoint_android_vh_mem_cgroup_alloc
|
__tracepoint_android_vh_mem_cgroup_alloc
|
||||||
|
__tracepoint_android_vh_adjust_alloc_flags
|
||||||
__tracepoint_android_vh_mem_cgroup_css_offline
|
__tracepoint_android_vh_mem_cgroup_css_offline
|
||||||
__tracepoint_android_vh_mem_cgroup_css_online
|
__tracepoint_android_vh_mem_cgroup_css_online
|
||||||
__tracepoint_android_vh_mem_cgroup_free
|
__tracepoint_android_vh_mem_cgroup_free
|
||||||
@@ -580,6 +583,7 @@
|
|||||||
__tracepoint_android_vh_print_slabinfo_header
|
__tracepoint_android_vh_print_slabinfo_header
|
||||||
__tracepoint_android_vh_record_mutex_lock_starttime
|
__tracepoint_android_vh_record_mutex_lock_starttime
|
||||||
__tracepoint_android_vh_record_pcpu_rwsem_starttime
|
__tracepoint_android_vh_record_pcpu_rwsem_starttime
|
||||||
|
__tracepoint_android_vh_percpu_rwsem_wq_add
|
||||||
__tracepoint_android_vh_record_rtmutex_lock_starttime
|
__tracepoint_android_vh_record_rtmutex_lock_starttime
|
||||||
__tracepoint_android_vh_record_rwsem_lock_starttime
|
__tracepoint_android_vh_record_rwsem_lock_starttime
|
||||||
__tracepoint_android_vh_rmqueue
|
__tracepoint_android_vh_rmqueue
|
||||||
|
|||||||
@@ -2498,6 +2498,7 @@
|
|||||||
typec_set_pwr_opmode
|
typec_set_pwr_opmode
|
||||||
typec_set_pwr_role
|
typec_set_pwr_role
|
||||||
typec_unregister_partner
|
typec_unregister_partner
|
||||||
|
typec_get_orientation
|
||||||
uart_add_one_port
|
uart_add_one_port
|
||||||
uart_get_baud_rate
|
uart_get_baud_rate
|
||||||
uart_insert_char
|
uart_insert_char
|
||||||
|
|||||||
@@ -8,6 +8,10 @@
|
|||||||
|
|
||||||
#include <asm/dwarf.h>
|
#include <asm/dwarf.h>
|
||||||
|
|
||||||
|
#define ASM_NL ` /* use '`' to mark new line in macro */
|
||||||
|
#define __ALIGN .align 4
|
||||||
|
#define __ALIGN_STR __stringify(__ALIGN)
|
||||||
|
|
||||||
#ifdef __ASSEMBLY__
|
#ifdef __ASSEMBLY__
|
||||||
|
|
||||||
.macro ST2 e, o, off
|
.macro ST2 e, o, off
|
||||||
@@ -28,10 +32,6 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#define ASM_NL ` /* use '`' to mark new line in macro */
|
|
||||||
#define __ALIGN .align 4
|
|
||||||
#define __ALIGN_STR __stringify(__ALIGN)
|
|
||||||
|
|
||||||
/* annotation for data we want in DCCM - if enabled in .config */
|
/* annotation for data we want in DCCM - if enabled in .config */
|
||||||
.macro ARCFP_DATA nm
|
.macro ARCFP_DATA nm
|
||||||
#ifdef CONFIG_ARC_HAS_DCCM
|
#ifdef CONFIG_ARC_HAS_DCCM
|
||||||
|
|||||||
@@ -128,7 +128,7 @@
|
|||||||
|
|
||||||
fixed-link {
|
fixed-link {
|
||||||
speed = <1000>;
|
speed = <1000>;
|
||||||
duplex-full;
|
full-duplex;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -212,7 +212,7 @@
|
|||||||
|
|
||||||
fixed-link {
|
fixed-link {
|
||||||
speed = <1000>;
|
speed = <1000>;
|
||||||
duplex-full;
|
full-duplex;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -542,7 +542,6 @@
|
|||||||
"spi_lr_session_done",
|
"spi_lr_session_done",
|
||||||
"spi_lr_overread";
|
"spi_lr_overread";
|
||||||
clocks = <&iprocmed>;
|
clocks = <&iprocmed>;
|
||||||
clock-names = "iprocmed";
|
|
||||||
num-cs = <2>;
|
num-cs = <2>;
|
||||||
#address-cells = <1>;
|
#address-cells = <1>;
|
||||||
#size-cells = <0>;
|
#size-cells = <0>;
|
||||||
|
|||||||
@@ -49,7 +49,7 @@
|
|||||||
lcd_backlight: backlight {
|
lcd_backlight: backlight {
|
||||||
compatible = "pwm-backlight";
|
compatible = "pwm-backlight";
|
||||||
|
|
||||||
pwms = <&pwm3 0 5000000 0>;
|
pwms = <&pwm3 0 5000000>;
|
||||||
brightness-levels = <0 4 8 16 32 64 128 255>;
|
brightness-levels = <0 4 8 16 32 64 128 255>;
|
||||||
default-brightness-level = <7>;
|
default-brightness-level = <7>;
|
||||||
enable-gpios = <&gpio5 14 GPIO_ACTIVE_HIGH>;
|
enable-gpios = <&gpio5 14 GPIO_ACTIVE_HIGH>;
|
||||||
|
|||||||
@@ -749,13 +749,13 @@
|
|||||||
|
|
||||||
&uart_B {
|
&uart_B {
|
||||||
compatible = "amlogic,meson8-uart";
|
compatible = "amlogic,meson8-uart";
|
||||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_UART1>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "xtal", "pclk", "baud";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_C {
|
&uart_C {
|
||||||
compatible = "amlogic,meson8-uart";
|
compatible = "amlogic,meson8-uart";
|
||||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_UART2>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "xtal", "pclk", "baud";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -737,13 +737,13 @@
|
|||||||
|
|
||||||
&uart_B {
|
&uart_B {
|
||||||
compatible = "amlogic,meson8b-uart";
|
compatible = "amlogic,meson8b-uart";
|
||||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_UART1>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "xtal", "pclk", "baud";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
&uart_C {
|
&uart_C {
|
||||||
compatible = "amlogic,meson8b-uart";
|
compatible = "amlogic,meson8b-uart";
|
||||||
clocks = <&xtal>, <&clkc CLKID_UART0>, <&clkc CLKID_CLK81>;
|
clocks = <&xtal>, <&clkc CLKID_UART2>, <&clkc CLKID_CLK81>;
|
||||||
clock-names = "xtal", "pclk", "baud";
|
clock-names = "xtal", "pclk", "baud";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,11 @@
|
|||||||
|
|
||||||
#include "omap3-gta04a5.dts"
|
#include "omap3-gta04a5.dts"
|
||||||
|
|
||||||
&omap3_pmx_core {
|
/ {
|
||||||
model = "Goldelico GTA04A5/Letux 2804 with OneNAND";
|
model = "Goldelico GTA04A5/Letux 2804 with OneNAND";
|
||||||
|
};
|
||||||
|
|
||||||
|
&omap3_pmx_core {
|
||||||
gpmc_pins: pinmux_gpmc_pins {
|
gpmc_pins: pinmux_gpmc_pins {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
|
|
||||||
|
|||||||
@@ -11,9 +11,9 @@
|
|||||||
dma@7984000 {
|
dma@7984000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
qpic-nand@79b0000 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&nand {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|||||||
@@ -102,10 +102,10 @@
|
|||||||
status = "okay";
|
status = "okay";
|
||||||
perst-gpio = <&tlmm 38 0x1>;
|
perst-gpio = <&tlmm 38 0x1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
qpic-nand@79b0000 {
|
|
||||||
pinctrl-0 = <&nand_pins>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&nand {
|
||||||
|
pinctrl-0 = <&nand_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
};
|
||||||
|
|||||||
@@ -65,11 +65,11 @@
|
|||||||
dma@7984000 {
|
dma@7984000 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
qpic-nand@79b0000 {
|
|
||||||
pinctrl-0 = <&nand_pins>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&nand {
|
||||||
|
pinctrl-0 = <&nand_pins>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|||||||
@@ -137,10 +137,13 @@
|
|||||||
|
|
||||||
sound {
|
sound {
|
||||||
compatible = "audio-graph-card";
|
compatible = "audio-graph-card";
|
||||||
routing =
|
widgets = "Headphone", "Headphone Jack",
|
||||||
"MIC_IN", "Capture",
|
"Line", "Line In Jack",
|
||||||
"Capture", "Mic Bias",
|
"Microphone", "Microphone Jack";
|
||||||
"Playback", "HP_OUT";
|
routing = "Headphone Jack", "HP_OUT",
|
||||||
|
"LINE_IN", "Line In Jack",
|
||||||
|
"MIC_IN", "Microphone Jack",
|
||||||
|
"Microphone Jack", "Mic Bias";
|
||||||
dais = <&sai2a_port &sai2b_port>;
|
dais = <&sai2a_port &sai2b_port>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -88,7 +88,7 @@
|
|||||||
|
|
||||||
sound {
|
sound {
|
||||||
compatible = "audio-graph-card";
|
compatible = "audio-graph-card";
|
||||||
label = "STM32MP1-AV96-HDMI";
|
label = "STM32-AV96-HDMI";
|
||||||
dais = <&sai2a_port>;
|
dais = <&sai2a_port>;
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
@@ -267,6 +267,12 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
dh_mac_eeprom: eeprom@53 {
|
||||||
|
compatible = "atmel,24c02";
|
||||||
|
reg = <0x53>;
|
||||||
|
pagesize = <16>;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
<dc {
|
<dc {
|
||||||
|
|||||||
@@ -171,12 +171,6 @@
|
|||||||
status = "disabled";
|
status = "disabled";
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
eeprom@53 {
|
|
||||||
compatible = "atmel,24c02";
|
|
||||||
reg = <0x53>;
|
|
||||||
pagesize = <16>;
|
|
||||||
};
|
|
||||||
};
|
};
|
||||||
|
|
||||||
&iwdg2 {
|
&iwdg2 {
|
||||||
|
|||||||
@@ -438,7 +438,7 @@
|
|||||||
i2s2_port: port {
|
i2s2_port: port {
|
||||||
i2s2_endpoint: endpoint {
|
i2s2_endpoint: endpoint {
|
||||||
remote-endpoint = <&sii9022_tx_endpoint>;
|
remote-endpoint = <&sii9022_tx_endpoint>;
|
||||||
format = "i2s";
|
dai-format = "i2s";
|
||||||
mclk-fs = <256>;
|
mclk-fs = <256>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -326,6 +326,23 @@
|
|||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Raw SMP data memory barrier
|
||||||
|
*/
|
||||||
|
.macro __smp_dmb mode
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 7
|
||||||
|
.ifeqs "\mode","arm"
|
||||||
|
dmb ish
|
||||||
|
.else
|
||||||
|
W(dmb) ish
|
||||||
|
.endif
|
||||||
|
#elif __LINUX_ARM_ARCH__ == 6
|
||||||
|
mcr p15, 0, r0, c7, c10, 5 @ dmb
|
||||||
|
#else
|
||||||
|
.error "Incompatible SMP platform"
|
||||||
|
#endif
|
||||||
|
.endm
|
||||||
|
|
||||||
#if defined(CONFIG_CPU_V7M)
|
#if defined(CONFIG_CPU_V7M)
|
||||||
/*
|
/*
|
||||||
* setmode is used to assert to be in svc mode during boot. For v7-M
|
* setmode is used to assert to be in svc mode during boot. For v7-M
|
||||||
|
|||||||
@@ -14,14 +14,35 @@
|
|||||||
* ops which are SMP safe even on a UP kernel.
|
* ops which are SMP safe even on a UP kernel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unordered
|
||||||
|
*/
|
||||||
|
|
||||||
#define sync_set_bit(nr, p) _set_bit(nr, p)
|
#define sync_set_bit(nr, p) _set_bit(nr, p)
|
||||||
#define sync_clear_bit(nr, p) _clear_bit(nr, p)
|
#define sync_clear_bit(nr, p) _clear_bit(nr, p)
|
||||||
#define sync_change_bit(nr, p) _change_bit(nr, p)
|
#define sync_change_bit(nr, p) _change_bit(nr, p)
|
||||||
#define sync_test_and_set_bit(nr, p) _test_and_set_bit(nr, p)
|
|
||||||
#define sync_test_and_clear_bit(nr, p) _test_and_clear_bit(nr, p)
|
|
||||||
#define sync_test_and_change_bit(nr, p) _test_and_change_bit(nr, p)
|
|
||||||
#define sync_test_bit(nr, addr) test_bit(nr, addr)
|
#define sync_test_bit(nr, addr) test_bit(nr, addr)
|
||||||
#define arch_sync_cmpxchg arch_cmpxchg
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Fully ordered
|
||||||
|
*/
|
||||||
|
|
||||||
|
int _sync_test_and_set_bit(int nr, volatile unsigned long * p);
|
||||||
|
#define sync_test_and_set_bit(nr, p) _sync_test_and_set_bit(nr, p)
|
||||||
|
|
||||||
|
int _sync_test_and_clear_bit(int nr, volatile unsigned long * p);
|
||||||
|
#define sync_test_and_clear_bit(nr, p) _sync_test_and_clear_bit(nr, p)
|
||||||
|
|
||||||
|
int _sync_test_and_change_bit(int nr, volatile unsigned long * p);
|
||||||
|
#define sync_test_and_change_bit(nr, p) _sync_test_and_change_bit(nr, p)
|
||||||
|
|
||||||
|
#define arch_sync_cmpxchg(ptr, old, new) \
|
||||||
|
({ \
|
||||||
|
__typeof__(*(ptr)) __ret; \
|
||||||
|
__smp_mb__before_atomic(); \
|
||||||
|
__ret = arch_cmpxchg_relaxed((ptr), (old), (new)); \
|
||||||
|
__smp_mb__after_atomic(); \
|
||||||
|
__ret; \
|
||||||
|
})
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -25,6 +25,9 @@ static inline int syscall_get_nr(struct task_struct *task,
|
|||||||
if (IS_ENABLED(CONFIG_AEABI) && !IS_ENABLED(CONFIG_OABI_COMPAT))
|
if (IS_ENABLED(CONFIG_AEABI) && !IS_ENABLED(CONFIG_OABI_COMPAT))
|
||||||
return task_thread_info(task)->abi_syscall;
|
return task_thread_info(task)->abi_syscall;
|
||||||
|
|
||||||
|
if (task_thread_info(task)->abi_syscall == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
return task_thread_info(task)->abi_syscall & __NR_SYSCALL_MASK;
|
return task_thread_info(task)->abi_syscall & __NR_SYSCALL_MASK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ slow_work_pending:
|
|||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
beq no_work_pending
|
beq no_work_pending
|
||||||
movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE)
|
movlt scno, #(__NR_restart_syscall - __NR_SYSCALL_BASE)
|
||||||
|
str scno, [tsk, #TI_ABI_SYSCALL] @ make sure tracers see update
|
||||||
ldmia sp, {r0 - r6} @ have to reload r0 - r6
|
ldmia sp, {r0 - r6} @ have to reload r0 - r6
|
||||||
b local_restart @ ... and off we go
|
b local_restart @ ... and off we go
|
||||||
ENDPROC(ret_fast_syscall)
|
ENDPROC(ret_fast_syscall)
|
||||||
|
|||||||
@@ -786,8 +786,9 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case PTRACE_SET_SYSCALL:
|
case PTRACE_SET_SYSCALL:
|
||||||
task_thread_info(child)->abi_syscall = data &
|
if (data != -1)
|
||||||
__NR_SYSCALL_MASK;
|
data &= __NR_SYSCALL_MASK;
|
||||||
|
task_thread_info(child)->abi_syscall = data;
|
||||||
ret = 0;
|
ret = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ UNWIND( .fnend )
|
|||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro testop, name, instr, store
|
.macro __testop, name, instr, store, barrier
|
||||||
ENTRY( \name )
|
ENTRY( \name )
|
||||||
UNWIND( .fnstart )
|
UNWIND( .fnstart )
|
||||||
ands ip, r1, #3
|
ands ip, r1, #3
|
||||||
@@ -38,7 +38,7 @@ UNWIND( .fnstart )
|
|||||||
mov r0, r0, lsr #5
|
mov r0, r0, lsr #5
|
||||||
add r1, r1, r0, lsl #2 @ Get word offset
|
add r1, r1, r0, lsl #2 @ Get word offset
|
||||||
mov r3, r2, lsl r3 @ create mask
|
mov r3, r2, lsl r3 @ create mask
|
||||||
smp_dmb
|
\barrier
|
||||||
#if __LINUX_ARM_ARCH__ >= 7 && defined(CONFIG_SMP)
|
#if __LINUX_ARM_ARCH__ >= 7 && defined(CONFIG_SMP)
|
||||||
.arch_extension mp
|
.arch_extension mp
|
||||||
ALT_SMP(W(pldw) [r1])
|
ALT_SMP(W(pldw) [r1])
|
||||||
@@ -50,13 +50,21 @@ UNWIND( .fnstart )
|
|||||||
strex ip, r2, [r1]
|
strex ip, r2, [r1]
|
||||||
cmp ip, #0
|
cmp ip, #0
|
||||||
bne 1b
|
bne 1b
|
||||||
smp_dmb
|
\barrier
|
||||||
cmp r0, #0
|
cmp r0, #0
|
||||||
movne r0, #1
|
movne r0, #1
|
||||||
2: bx lr
|
2: bx lr
|
||||||
UNWIND( .fnend )
|
UNWIND( .fnend )
|
||||||
ENDPROC(\name )
|
ENDPROC(\name )
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
|
.macro testop, name, instr, store
|
||||||
|
__testop \name, \instr, \store, smp_dmb
|
||||||
|
.endm
|
||||||
|
|
||||||
|
.macro sync_testop, name, instr, store
|
||||||
|
__testop \name, \instr, \store, __smp_dmb
|
||||||
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro bitop, name, instr
|
.macro bitop, name, instr
|
||||||
ENTRY( \name )
|
ENTRY( \name )
|
||||||
|
|||||||
@@ -10,3 +10,7 @@
|
|||||||
.text
|
.text
|
||||||
|
|
||||||
testop _test_and_change_bit, eor, str
|
testop _test_and_change_bit, eor, str
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
|
sync_testop _sync_test_and_change_bit, eor, str
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -10,3 +10,7 @@
|
|||||||
.text
|
.text
|
||||||
|
|
||||||
testop _test_and_clear_bit, bicne, strne
|
testop _test_and_clear_bit, bicne, strne
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
|
sync_testop _sync_test_and_clear_bit, bicne, strne
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -10,3 +10,7 @@
|
|||||||
.text
|
.text
|
||||||
|
|
||||||
testop _test_and_set_bit, orreq, streq
|
testop _test_and_set_bit, orreq, streq
|
||||||
|
|
||||||
|
#if __LINUX_ARM_ARCH__ >= 6
|
||||||
|
sync_testop _sync_test_and_set_bit, orreq, streq
|
||||||
|
#endif
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <asm/mach/time.h>
|
#include <asm/mach/time.h>
|
||||||
#include "soc.h"
|
#include "soc.h"
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* Timer handling for EP93xx
|
* Timer handling for EP93xx
|
||||||
@@ -60,7 +61,7 @@ static u64 notrace ep93xx_read_sched_clock(void)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
u64 ep93xx_clocksource_read(struct clocksource *c)
|
static u64 ep93xx_clocksource_read(struct clocksource *c)
|
||||||
{
|
{
|
||||||
u64 ret;
|
u64 ret;
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@
|
|||||||
#include <linux/of_platform.h>
|
#include <linux/of_platform.h>
|
||||||
#include <linux/irqdomain.h>
|
#include <linux/irqdomain.h>
|
||||||
#include <linux/clocksource.h>
|
#include <linux/clocksource.h>
|
||||||
|
#include <linux/clockchips.h>
|
||||||
|
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
|||||||
@@ -63,6 +63,9 @@ static void __init orion5x_dt_init(void)
|
|||||||
if (of_machine_is_compatible("maxtor,shared-storage-2"))
|
if (of_machine_is_compatible("maxtor,shared-storage-2"))
|
||||||
mss2_init();
|
mss2_init();
|
||||||
|
|
||||||
|
if (of_machine_is_compatible("lacie,d2-network"))
|
||||||
|
d2net_init();
|
||||||
|
|
||||||
of_platform_default_populate(NULL, orion5x_auxdata_lookup, NULL);
|
of_platform_default_populate(NULL, orion5x_auxdata_lookup, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -75,6 +75,12 @@ extern void mss2_init(void);
|
|||||||
static inline void mss2_init(void) {}
|
static inline void mss2_init(void) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_MACH_D2NET_DT
|
||||||
|
void d2net_init(void);
|
||||||
|
#else
|
||||||
|
static inline void d2net_init(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
* Helpers to access Orion registers
|
* Helpers to access Orion registers
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ enum probes_insn checker_stack_use_imm_0xx(probes_opcode_t insn,
|
|||||||
* Different from other insn uses imm8, the real addressing offset of
|
* Different from other insn uses imm8, the real addressing offset of
|
||||||
* STRD in T32 encoding should be imm8 * 4. See ARMARM description.
|
* STRD in T32 encoding should be imm8 * 4. See ARMARM description.
|
||||||
*/
|
*/
|
||||||
enum probes_insn checker_stack_use_t32strd(probes_opcode_t insn,
|
static enum probes_insn checker_stack_use_t32strd(probes_opcode_t insn,
|
||||||
struct arch_probes_insn *asi,
|
struct arch_probes_insn *asi,
|
||||||
const struct decode_header *h)
|
const struct decode_header *h)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -233,7 +233,7 @@ singlestep(struct kprobe *p, struct pt_regs *regs, struct kprobe_ctlblk *kcb)
|
|||||||
* kprobe, and that level is reserved for user kprobe handlers, so we can't
|
* kprobe, and that level is reserved for user kprobe handlers, so we can't
|
||||||
* risk encountering a new kprobe in an interrupt handler.
|
* risk encountering a new kprobe in an interrupt handler.
|
||||||
*/
|
*/
|
||||||
void __kprobes kprobe_handler(struct pt_regs *regs)
|
static void __kprobes kprobe_handler(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
struct kprobe *p, *cur;
|
struct kprobe *p, *cur;
|
||||||
struct kprobe_ctlblk *kcb;
|
struct kprobe_ctlblk *kcb;
|
||||||
|
|||||||
@@ -145,8 +145,6 @@ __arch_remove_optimized_kprobe(struct optimized_kprobe *op, int dirty)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void kprobe_handler(struct pt_regs *regs);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)
|
optimized_callback(struct optimized_kprobe *op, struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -720,7 +720,7 @@ static const char coverage_register_lookup[16] = {
|
|||||||
[REG_TYPE_NOSPPCX] = COVERAGE_ANY_REG | COVERAGE_SP,
|
[REG_TYPE_NOSPPCX] = COVERAGE_ANY_REG | COVERAGE_SP,
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned coverage_start_registers(const struct decode_header *h)
|
static unsigned coverage_start_registers(const struct decode_header *h)
|
||||||
{
|
{
|
||||||
unsigned regs = 0;
|
unsigned regs = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@@ -454,3 +454,7 @@ void kprobe_thumb32_test_cases(void);
|
|||||||
#else
|
#else
|
||||||
void kprobe_arm_test_cases(void);
|
void kprobe_arm_test_cases(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
void __kprobes_test_case_start(void);
|
||||||
|
void __kprobes_test_case_end_16(void);
|
||||||
|
void __kprobes_test_case_end_32(void);
|
||||||
|
|||||||
@@ -281,6 +281,10 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
&gic {
|
||||||
|
mediatek,broken-save-restore-fw;
|
||||||
|
};
|
||||||
|
|
||||||
&gpu {
|
&gpu {
|
||||||
mali-supply = <&mt6358_vgpu_reg>;
|
mali-supply = <&mt6358_vgpu_reg>;
|
||||||
sram-supply = <&mt6358_vsram_gpu_reg>;
|
sram-supply = <&mt6358_vsram_gpu_reg>;
|
||||||
|
|||||||
@@ -41,7 +41,8 @@
|
|||||||
clock-frequency = <1701000000>;
|
clock-frequency = <1701000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
||||||
next-level-cache = <&l2_0>;
|
next-level-cache = <&l2_0>;
|
||||||
capacity-dmips-mhz = <530>;
|
performance-domains = <&performance 0>;
|
||||||
|
capacity-dmips-mhz = <427>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu1: cpu@100 {
|
cpu1: cpu@100 {
|
||||||
@@ -52,7 +53,8 @@
|
|||||||
clock-frequency = <1701000000>;
|
clock-frequency = <1701000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
||||||
next-level-cache = <&l2_0>;
|
next-level-cache = <&l2_0>;
|
||||||
capacity-dmips-mhz = <530>;
|
performance-domains = <&performance 0>;
|
||||||
|
capacity-dmips-mhz = <427>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu2: cpu@200 {
|
cpu2: cpu@200 {
|
||||||
@@ -63,7 +65,8 @@
|
|||||||
clock-frequency = <1701000000>;
|
clock-frequency = <1701000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
||||||
next-level-cache = <&l2_0>;
|
next-level-cache = <&l2_0>;
|
||||||
capacity-dmips-mhz = <530>;
|
performance-domains = <&performance 0>;
|
||||||
|
capacity-dmips-mhz = <427>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu3: cpu@300 {
|
cpu3: cpu@300 {
|
||||||
@@ -74,7 +77,8 @@
|
|||||||
clock-frequency = <1701000000>;
|
clock-frequency = <1701000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
cpu-idle-states = <&cpu_sleep_l &cluster_sleep_l>;
|
||||||
next-level-cache = <&l2_0>;
|
next-level-cache = <&l2_0>;
|
||||||
capacity-dmips-mhz = <530>;
|
performance-domains = <&performance 0>;
|
||||||
|
capacity-dmips-mhz = <427>;
|
||||||
};
|
};
|
||||||
|
|
||||||
cpu4: cpu@400 {
|
cpu4: cpu@400 {
|
||||||
@@ -85,6 +89,7 @@
|
|||||||
clock-frequency = <2171000000>;
|
clock-frequency = <2171000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
||||||
next-level-cache = <&l2_1>;
|
next-level-cache = <&l2_1>;
|
||||||
|
performance-domains = <&performance 1>;
|
||||||
capacity-dmips-mhz = <1024>;
|
capacity-dmips-mhz = <1024>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -96,6 +101,7 @@
|
|||||||
clock-frequency = <2171000000>;
|
clock-frequency = <2171000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
||||||
next-level-cache = <&l2_1>;
|
next-level-cache = <&l2_1>;
|
||||||
|
performance-domains = <&performance 1>;
|
||||||
capacity-dmips-mhz = <1024>;
|
capacity-dmips-mhz = <1024>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -107,6 +113,7 @@
|
|||||||
clock-frequency = <2171000000>;
|
clock-frequency = <2171000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
||||||
next-level-cache = <&l2_1>;
|
next-level-cache = <&l2_1>;
|
||||||
|
performance-domains = <&performance 1>;
|
||||||
capacity-dmips-mhz = <1024>;
|
capacity-dmips-mhz = <1024>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -118,6 +125,7 @@
|
|||||||
clock-frequency = <2171000000>;
|
clock-frequency = <2171000000>;
|
||||||
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
cpu-idle-states = <&cpu_sleep_b &cluster_sleep_b>;
|
||||||
next-level-cache = <&l2_1>;
|
next-level-cache = <&l2_1>;
|
||||||
|
performance-domains = <&performance 1>;
|
||||||
capacity-dmips-mhz = <1024>;
|
capacity-dmips-mhz = <1024>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -234,6 +242,12 @@
|
|||||||
compatible = "simple-bus";
|
compatible = "simple-bus";
|
||||||
ranges;
|
ranges;
|
||||||
|
|
||||||
|
performance: performance-controller@11bc10 {
|
||||||
|
compatible = "mediatek,cpufreq-hw";
|
||||||
|
reg = <0 0x0011bc10 0 0x120>, <0 0x0011bd30 0 0x120>;
|
||||||
|
#performance-domain-cells = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
gic: interrupt-controller@c000000 {
|
gic: interrupt-controller@c000000 {
|
||||||
compatible = "arm,gic-v3";
|
compatible = "arm,gic-v3";
|
||||||
#interrupt-cells = <4>;
|
#interrupt-cells = <4>;
|
||||||
|
|||||||
@@ -61,7 +61,7 @@
|
|||||||
interrupt-affinity = <&cpu0>, <&cpu1>;
|
interrupt-affinity = <&cpu0>, <&cpu1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
psci {
|
psci: psci {
|
||||||
compatible = "arm,psci-0.2";
|
compatible = "arm,psci-0.2";
|
||||||
method = "smc";
|
method = "smc";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -6,6 +6,18 @@
|
|||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
#include "sparx5.dtsi"
|
#include "sparx5.dtsi"
|
||||||
|
|
||||||
|
&psci {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu0 {
|
||||||
|
enable-method = "spin-table";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cpu1 {
|
||||||
|
enable-method = "spin-table";
|
||||||
|
};
|
||||||
|
|
||||||
&uart0 {
|
&uart0 {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -5,9 +5,847 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "apq8016-sbc.dtsi"
|
#include "msm8916-pm8916.dtsi"
|
||||||
|
#include <dt-bindings/gpio/gpio.h>
|
||||||
|
#include <dt-bindings/input/input.h>
|
||||||
|
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
|
||||||
|
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
|
||||||
|
#include <dt-bindings/sound/apq8016-lpass.h>
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Qualcomm Technologies, Inc. APQ 8016 SBC";
|
model = "Qualcomm Technologies, Inc. APQ 8016 SBC";
|
||||||
compatible = "qcom,apq8016-sbc", "qcom,apq8016";
|
compatible = "qcom,apq8016-sbc", "qcom,apq8016";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &blsp1_uart2;
|
||||||
|
serial1 = &blsp1_uart1;
|
||||||
|
usid0 = &pm8916_0;
|
||||||
|
i2c0 = &blsp_i2c2;
|
||||||
|
i2c1 = &blsp_i2c6;
|
||||||
|
i2c3 = &blsp_i2c4;
|
||||||
|
spi0 = &blsp_spi5;
|
||||||
|
spi1 = &blsp_spi3;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = "serial0";
|
||||||
|
};
|
||||||
|
|
||||||
|
camera_vdddo_1v8: camera-vdddo-1v8 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "camera_vdddo";
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
camera_vdda_2v8: camera-vdda-2v8 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "camera_vdda";
|
||||||
|
regulator-min-microvolt = <2800000>;
|
||||||
|
regulator-max-microvolt = <2800000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
camera_vddd_1v5: camera-vddd-1v5 {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-name = "camera_vddd";
|
||||||
|
regulator-min-microvolt = <1500000>;
|
||||||
|
regulator-max-microvolt = <1500000>;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
reserved-memory {
|
||||||
|
ramoops@bff00000 {
|
||||||
|
compatible = "ramoops";
|
||||||
|
reg = <0x0 0xbff00000 0x0 0x100000>;
|
||||||
|
|
||||||
|
record-size = <0x20000>;
|
||||||
|
console-size = <0x20000>;
|
||||||
|
ftrace-size = <0x20000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
usb2513 {
|
||||||
|
compatible = "smsc,usb3503";
|
||||||
|
reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
|
||||||
|
initial-mode = <1>;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_id: usb-id {
|
||||||
|
compatible = "linux,extcon-usb-gpio";
|
||||||
|
id-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&usb_id_default>;
|
||||||
|
};
|
||||||
|
|
||||||
|
hdmi-out {
|
||||||
|
compatible = "hdmi-connector";
|
||||||
|
type = "a";
|
||||||
|
|
||||||
|
port {
|
||||||
|
hdmi_con: endpoint {
|
||||||
|
remote-endpoint = <&adv7533_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
gpio-keys {
|
||||||
|
compatible = "gpio-keys";
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
autorepeat;
|
||||||
|
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&msm_key_volp_n_default>;
|
||||||
|
|
||||||
|
button@0 {
|
||||||
|
label = "Volume Up";
|
||||||
|
linux,code = <KEY_VOLUMEUP>;
|
||||||
|
gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
leds {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&msmgpio_leds>,
|
||||||
|
<&pm8916_gpios_leds>,
|
||||||
|
<&pm8916_mpps_leds>;
|
||||||
|
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
|
||||||
|
led@1 {
|
||||||
|
label = "apq8016-sbc:green:user1";
|
||||||
|
gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "heartbeat";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@2 {
|
||||||
|
label = "apq8016-sbc:green:user2";
|
||||||
|
gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "mmc0";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@3 {
|
||||||
|
label = "apq8016-sbc:green:user3";
|
||||||
|
gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "mmc1";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@4 {
|
||||||
|
label = "apq8016-sbc:green:user4";
|
||||||
|
gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "none";
|
||||||
|
panic-indicator;
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@5 {
|
||||||
|
label = "apq8016-sbc:yellow:wlan";
|
||||||
|
gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "phy0tx";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
|
||||||
|
led@6 {
|
||||||
|
label = "apq8016-sbc:blue:bt";
|
||||||
|
gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
|
||||||
|
linux,default-trigger = "bluetooth-power";
|
||||||
|
default-state = "off";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_dma {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_i2c2 {
|
||||||
|
/* On Low speed expansion */
|
||||||
|
status = "okay";
|
||||||
|
label = "LS-I2C0";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_i2c4 {
|
||||||
|
/* On High speed expansion */
|
||||||
|
status = "okay";
|
||||||
|
label = "HS-I2C2";
|
||||||
|
|
||||||
|
adv_bridge: bridge@39 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
compatible = "adi,adv7533";
|
||||||
|
reg = <0x39>;
|
||||||
|
|
||||||
|
interrupt-parent = <&msmgpio>;
|
||||||
|
interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
|
||||||
|
|
||||||
|
adi,dsi-lanes = <4>;
|
||||||
|
clocks = <&rpmcc RPM_SMD_BB_CLK2>;
|
||||||
|
clock-names = "cec";
|
||||||
|
|
||||||
|
pd-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>;
|
||||||
|
|
||||||
|
avdd-supply = <&pm8916_l6>;
|
||||||
|
v1p2-supply = <&pm8916_l6>;
|
||||||
|
v3p3-supply = <&pm8916_l17>;
|
||||||
|
|
||||||
|
pinctrl-names = "default","sleep";
|
||||||
|
pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
|
||||||
|
pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
|
||||||
|
#sound-dai-cells = <1>;
|
||||||
|
|
||||||
|
ports {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
port@0 {
|
||||||
|
reg = <0>;
|
||||||
|
adv7533_in: endpoint {
|
||||||
|
remote-endpoint = <&dsi0_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
port@1 {
|
||||||
|
reg = <1>;
|
||||||
|
adv7533_out: endpoint {
|
||||||
|
remote-endpoint = <&hdmi_con>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_i2c6 {
|
||||||
|
/* On Low speed expansion */
|
||||||
|
status = "okay";
|
||||||
|
label = "LS-I2C1";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_spi3 {
|
||||||
|
/* On High speed expansion */
|
||||||
|
status = "okay";
|
||||||
|
label = "HS-SPI1";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp_spi5 {
|
||||||
|
/* On Low speed expansion */
|
||||||
|
status = "okay";
|
||||||
|
label = "LS-SPI0";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_uart1 {
|
||||||
|
status = "okay";
|
||||||
|
label = "LS-UART0";
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_uart2 {
|
||||||
|
status = "okay";
|
||||||
|
label = "LS-UART1";
|
||||||
|
};
|
||||||
|
|
||||||
|
&camss {
|
||||||
|
status = "okay";
|
||||||
|
ports {
|
||||||
|
port@0 {
|
||||||
|
reg = <0>;
|
||||||
|
csiphy0_ep: endpoint {
|
||||||
|
clock-lanes = <1>;
|
||||||
|
data-lanes = <0 2>;
|
||||||
|
remote-endpoint = <&ov5640_ep>;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&cci {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&cci_i2c0 {
|
||||||
|
camera_rear@3b {
|
||||||
|
compatible = "ovti,ov5640";
|
||||||
|
reg = <0x3b>;
|
||||||
|
|
||||||
|
enable-gpios = <&msmgpio 34 GPIO_ACTIVE_HIGH>;
|
||||||
|
reset-gpios = <&msmgpio 35 GPIO_ACTIVE_LOW>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&camera_rear_default>;
|
||||||
|
|
||||||
|
clocks = <&gcc GCC_CAMSS_MCLK0_CLK>;
|
||||||
|
clock-names = "xclk";
|
||||||
|
clock-frequency = <23880000>;
|
||||||
|
|
||||||
|
vdddo-supply = <&camera_vdddo_1v8>;
|
||||||
|
vdda-supply = <&camera_vdda_2v8>;
|
||||||
|
vddd-supply = <&camera_vddd_1v5>;
|
||||||
|
|
||||||
|
/* No camera mezzanine by default */
|
||||||
|
status = "disabled";
|
||||||
|
|
||||||
|
port {
|
||||||
|
ov5640_ep: endpoint {
|
||||||
|
clock-lanes = <1>;
|
||||||
|
data-lanes = <0 2>;
|
||||||
|
remote-endpoint = <&csiphy0_ep>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&dsi0_out {
|
||||||
|
data-lanes = <0 1 2 3>;
|
||||||
|
remote-endpoint = <&adv7533_in>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpass {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&mdss {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&mpss {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
firmware-name = "qcom/apq8016/mba.mbn", "qcom/apq8016/modem.mbn";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pm8916_resin {
|
||||||
|
status = "okay";
|
||||||
|
linux,code = <KEY_VOLUMEDOWN>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pronto {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
firmware-name = "qcom/apq8016/wcnss.mbn";
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhc_1 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
|
||||||
|
pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&sdhc_2 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
|
||||||
|
pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
|
||||||
|
|
||||||
|
cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&sound {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
|
||||||
|
pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
qcom,model = "DB410c";
|
||||||
|
qcom,audio-routing =
|
||||||
|
"AMIC2", "MIC BIAS Internal2",
|
||||||
|
"AMIC3", "MIC BIAS External1";
|
||||||
|
|
||||||
|
external-dai-link@0 {
|
||||||
|
link-name = "ADV7533";
|
||||||
|
cpu {
|
||||||
|
sound-dai = <&lpass MI2S_QUATERNARY>;
|
||||||
|
};
|
||||||
|
codec {
|
||||||
|
sound-dai = <&adv_bridge 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
internal-codec-playback-dai-link@0 {
|
||||||
|
link-name = "WCD";
|
||||||
|
cpu {
|
||||||
|
sound-dai = <&lpass MI2S_PRIMARY>;
|
||||||
|
};
|
||||||
|
codec {
|
||||||
|
sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
internal-codec-capture-dai-link@0 {
|
||||||
|
link-name = "WCD-Capture";
|
||||||
|
cpu {
|
||||||
|
sound-dai = <&lpass MI2S_TERTIARY>;
|
||||||
|
};
|
||||||
|
codec {
|
||||||
|
sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb {
|
||||||
|
status = "okay";
|
||||||
|
extcon = <&usb_id>, <&usb_id>;
|
||||||
|
|
||||||
|
pinctrl-names = "default", "device";
|
||||||
|
pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
|
||||||
|
pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb_hs_phy {
|
||||||
|
extcon = <&usb_id>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&wcd_codec {
|
||||||
|
clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
|
||||||
|
qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&wcnss_ctrl {
|
||||||
|
firmware-name = "qcom/apq8016/WCNSS_qcom_wlan_nv_sbc.bin";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Enable CoreSight */
|
||||||
|
&cti0 { status = "okay"; };
|
||||||
|
&cti1 { status = "okay"; };
|
||||||
|
&cti12 { status = "okay"; };
|
||||||
|
&cti13 { status = "okay"; };
|
||||||
|
&cti14 { status = "okay"; };
|
||||||
|
&cti15 { status = "okay"; };
|
||||||
|
&debug0 { status = "okay"; };
|
||||||
|
&debug1 { status = "okay"; };
|
||||||
|
&debug2 { status = "okay"; };
|
||||||
|
&debug3 { status = "okay"; };
|
||||||
|
&etf { status = "okay"; };
|
||||||
|
&etm0 { status = "okay"; };
|
||||||
|
&etm1 { status = "okay"; };
|
||||||
|
&etm2 { status = "okay"; };
|
||||||
|
&etm3 { status = "okay"; };
|
||||||
|
&etr { status = "okay"; };
|
||||||
|
&funnel0 { status = "okay"; };
|
||||||
|
&funnel1 { status = "okay"; };
|
||||||
|
&replicator { status = "okay"; };
|
||||||
|
&stm { status = "okay"; };
|
||||||
|
&tpiu { status = "okay"; };
|
||||||
|
|
||||||
|
&smd_rpm_regulators {
|
||||||
|
vdd_l1_l2_l3-supply = <&pm8916_s3>;
|
||||||
|
vdd_l4_l5_l6-supply = <&pm8916_s4>;
|
||||||
|
vdd_l7-supply = <&pm8916_s4>;
|
||||||
|
|
||||||
|
s3 {
|
||||||
|
regulator-min-microvolt = <1250000>;
|
||||||
|
regulator-max-microvolt = <1350000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
s4 {
|
||||||
|
regulator-min-microvolt = <1850000>;
|
||||||
|
regulator-max-microvolt = <2150000>;
|
||||||
|
|
||||||
|
regulator-always-on;
|
||||||
|
regulator-boot-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
l1 {
|
||||||
|
regulator-min-microvolt = <1225000>;
|
||||||
|
regulator-max-microvolt = <1225000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l2 {
|
||||||
|
regulator-min-microvolt = <1200000>;
|
||||||
|
regulator-max-microvolt = <1200000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l4 {
|
||||||
|
regulator-min-microvolt = <2050000>;
|
||||||
|
regulator-max-microvolt = <2050000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l5 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l6 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l7 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l8 {
|
||||||
|
regulator-min-microvolt = <2900000>;
|
||||||
|
regulator-max-microvolt = <2900000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l9 {
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l10 {
|
||||||
|
regulator-min-microvolt = <2800000>;
|
||||||
|
regulator-max-microvolt = <2800000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l11 {
|
||||||
|
regulator-min-microvolt = <2950000>;
|
||||||
|
regulator-max-microvolt = <2950000>;
|
||||||
|
regulator-allow-set-load;
|
||||||
|
regulator-system-load = <200000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l12 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <2950000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l13 {
|
||||||
|
regulator-min-microvolt = <3075000>;
|
||||||
|
regulator-max-microvolt = <3075000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l14 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The 96Boards specification expects a 1.8V power rail on the low-speed
|
||||||
|
* expansion connector that is able to provide at least 0.18W / 100 mA.
|
||||||
|
* L15/L16 are connected in parallel to provide 55 mA each. A minimum load
|
||||||
|
* must be specified to ensure the regulators are not put in LPM where they
|
||||||
|
* would only provide 5 mA.
|
||||||
|
*/
|
||||||
|
l15 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-system-load = <50000>;
|
||||||
|
regulator-allow-set-load;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
l16 {
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-system-load = <50000>;
|
||||||
|
regulator-allow-set-load;
|
||||||
|
regulator-always-on;
|
||||||
|
};
|
||||||
|
|
||||||
|
l17 {
|
||||||
|
regulator-min-microvolt = <3300000>;
|
||||||
|
regulator-max-microvolt = <3300000>;
|
||||||
|
};
|
||||||
|
|
||||||
|
l18 {
|
||||||
|
regulator-min-microvolt = <2700000>;
|
||||||
|
regulator-max-microvolt = <2700000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 2mA drive strength is not enough when connecting multiple
|
||||||
|
* I2C devices with different pull up resistors.
|
||||||
|
*/
|
||||||
|
&i2c2_default {
|
||||||
|
drive-strength = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c4_default {
|
||||||
|
drive-strength = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c6_default {
|
||||||
|
drive-strength = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* GPIO name legend: proper name = the GPIO line is used as GPIO
|
||||||
|
* NC = not connected (pin out but not routed from the chip to
|
||||||
|
* anything the board)
|
||||||
|
* "[PER]" = pin is muxed for [peripheral] (not GPIO)
|
||||||
|
* LSEC = Low Speed External Connector
|
||||||
|
* HSEC = High Speed External Connector
|
||||||
|
*
|
||||||
|
* Line names are taken from the schematic "DragonBoard410c"
|
||||||
|
* dated monday, august 31, 2015. Page 5 in particular.
|
||||||
|
*
|
||||||
|
* For the lines routed to the external connectors the
|
||||||
|
* lines are named after the 96Boards CE Specification 1.0,
|
||||||
|
* Appendix "Expansion Connector Signal Description".
|
||||||
|
*
|
||||||
|
* When the 96Board naming of a line and the schematic name of
|
||||||
|
* the same line are in conflict, the 96Board specification
|
||||||
|
* takes precedence, which means that the external UART on the
|
||||||
|
* LSEC is named UART0 while the schematic and SoC names this
|
||||||
|
* UART3. This is only for the informational lines i.e. "[FOO]",
|
||||||
|
* the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
|
||||||
|
* ones actually used for GPIO.
|
||||||
|
*/
|
||||||
|
|
||||||
|
&msmgpio {
|
||||||
|
gpio-line-names =
|
||||||
|
"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
|
||||||
|
"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
|
||||||
|
"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
|
||||||
|
"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
|
||||||
|
"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
|
||||||
|
"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
|
||||||
|
"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
|
||||||
|
"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
|
||||||
|
"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
|
||||||
|
"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
|
||||||
|
"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
|
||||||
|
"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
|
||||||
|
"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
|
||||||
|
"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
|
||||||
|
"[I2C3_SDA]", /* HSEC pin 38 */
|
||||||
|
"[I2C3_SCL]", /* HSEC pin 36 */
|
||||||
|
"[SPI0_MOSI]", /* LSEC pin 14 */
|
||||||
|
"[SPI0_MISO]", /* LSEC pin 10 */
|
||||||
|
"[SPI0_CS_N]", /* LSEC pin 12 */
|
||||||
|
"[SPI0_CLK]", /* LSEC pin 8 */
|
||||||
|
"HDMI_HPD_N", /* GPIO 20 */
|
||||||
|
"USR_LED_1_CTRL",
|
||||||
|
"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
|
||||||
|
"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
|
||||||
|
"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
|
||||||
|
"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
|
||||||
|
"[CSI0_MCLK]", /* HSEC pin 15 */
|
||||||
|
"[CSI1_MCLK]", /* HSEC pin 17 */
|
||||||
|
"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
|
||||||
|
"[I2C2_SDA]", /* HSEC pin 34 */
|
||||||
|
"[I2C2_SCL]", /* HSEC pin 32 */
|
||||||
|
"DSI2HDMI_INT_N",
|
||||||
|
"DSI_SW_SEL_APQ",
|
||||||
|
"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
|
||||||
|
"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
|
||||||
|
"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
|
||||||
|
"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
|
||||||
|
"FORCED_USB_BOOT",
|
||||||
|
"SD_CARD_DET_N",
|
||||||
|
"[WCSS_BT_SSBI]",
|
||||||
|
"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
|
||||||
|
"[WCSS_WLAN_DATA_1]",
|
||||||
|
"[WCSS_WLAN_DATA_0]",
|
||||||
|
"[WCSS_WLAN_SET]",
|
||||||
|
"[WCSS_WLAN_CLK]",
|
||||||
|
"[WCSS_FM_SSBI]",
|
||||||
|
"[WCSS_FM_SDI]",
|
||||||
|
"[WCSS_BT_DAT_CTL]",
|
||||||
|
"[WCSS_BT_DAT_STB]",
|
||||||
|
"NC",
|
||||||
|
"NC", /* GPIO 50 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC", /* GPIO 60 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"[CDC_PDM0_CLK]",
|
||||||
|
"[CDC_PDM0_SYNC]",
|
||||||
|
"[CDC_PDM0_TX0]",
|
||||||
|
"[CDC_PDM0_RX0]",
|
||||||
|
"[CDC_PDM0_RX1]",
|
||||||
|
"[CDC_PDM0_RX2]",
|
||||||
|
"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
|
||||||
|
"NC", /* GPIO 70 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC", /* GPIO 74 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"BOOT_CONFIG_0", /* GPIO 80 */
|
||||||
|
"BOOT_CONFIG_1",
|
||||||
|
"BOOT_CONFIG_2",
|
||||||
|
"BOOT_CONFIG_3",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"BOOT_CONFIG_5",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC", /* GPIO 90 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC", /* GPIO 100 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"SSBI_GPS",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"KEY_VOLP_N",
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"[LS_EXP_MI2S_WS]", /* GPIO 110 */
|
||||||
|
"NC",
|
||||||
|
"NC",
|
||||||
|
"[LS_EXP_MI2S_SCK]",
|
||||||
|
"[LS_EXP_MI2S_DATA0]",
|
||||||
|
"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
|
||||||
|
"NC",
|
||||||
|
"[DSI2HDMI_MI2S_WS]",
|
||||||
|
"[DSI2HDMI_MI2S_SCK]",
|
||||||
|
"[DSI2HDMI_MI2S_DATA0]",
|
||||||
|
"USR_LED_2_CTRL", /* GPIO 120 */
|
||||||
|
"SB_HS_ID";
|
||||||
|
|
||||||
|
msmgpio_leds: msmgpio-leds {
|
||||||
|
pins = "gpio21", "gpio120";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_id_default: usb-id-default {
|
||||||
|
pins = "gpio121";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <8>;
|
||||||
|
input-enable;
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
|
||||||
|
adv7533_int_active: adv533-int-active {
|
||||||
|
pins = "gpio31";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <16>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
adv7533_int_suspend: adv7533-int-suspend {
|
||||||
|
pins = "gpio31";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <2>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
adv7533_switch_active: adv7533-switch-active {
|
||||||
|
pins = "gpio32";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <16>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
adv7533_switch_suspend: adv7533-switch-suspend {
|
||||||
|
pins = "gpio32";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <2>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
msm_key_volp_n_default: msm-key-volp-n-default {
|
||||||
|
pins = "gpio107";
|
||||||
|
function = "gpio";
|
||||||
|
|
||||||
|
drive-strength = <8>;
|
||||||
|
input-enable;
|
||||||
|
bias-pull-up;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pm8916_gpios {
|
||||||
|
gpio-line-names =
|
||||||
|
"USR_LED_3_CTRL",
|
||||||
|
"USR_LED_4_CTRL",
|
||||||
|
"USB_HUB_RESET_N_PM",
|
||||||
|
"USB_SW_SEL_PM";
|
||||||
|
|
||||||
|
usb_hub_reset_pm: usb-hub-reset-pm {
|
||||||
|
pins = "gpio3";
|
||||||
|
function = PMIC_GPIO_FUNC_NORMAL;
|
||||||
|
|
||||||
|
input-disable;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_hub_reset_pm_device: usb-hub-reset-pm-device {
|
||||||
|
pins = "gpio3";
|
||||||
|
function = PMIC_GPIO_FUNC_NORMAL;
|
||||||
|
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_sw_sel_pm: usb-sw-sel-pm {
|
||||||
|
pins = "gpio4";
|
||||||
|
function = PMIC_GPIO_FUNC_NORMAL;
|
||||||
|
|
||||||
|
power-source = <PM8916_GPIO_VPH>;
|
||||||
|
input-disable;
|
||||||
|
output-high;
|
||||||
|
};
|
||||||
|
|
||||||
|
usb_sw_sel_pm_device: usb-sw-sel-pm-device {
|
||||||
|
pins = "gpio4";
|
||||||
|
function = PMIC_GPIO_FUNC_NORMAL;
|
||||||
|
|
||||||
|
power-source = <PM8916_GPIO_VPH>;
|
||||||
|
input-disable;
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
|
||||||
|
pm8916_gpios_leds: pm8916-gpios-leds {
|
||||||
|
pins = "gpio1", "gpio2";
|
||||||
|
function = PMIC_GPIO_FUNC_NORMAL;
|
||||||
|
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pm8916_mpps {
|
||||||
|
gpio-line-names =
|
||||||
|
"VDD_PX_BIAS",
|
||||||
|
"WLAN_LED_CTRL",
|
||||||
|
"BT_LED_CTRL",
|
||||||
|
"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
|
||||||
|
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&ls_exp_gpio_f>;
|
||||||
|
|
||||||
|
ls_exp_gpio_f: pm8916-mpp4-state {
|
||||||
|
pins = "mpp4";
|
||||||
|
function = "digital";
|
||||||
|
|
||||||
|
output-low;
|
||||||
|
power-source = <PM8916_MPP_L5>; // 1.8V
|
||||||
|
};
|
||||||
|
|
||||||
|
pm8916_mpps_leds: pm8916-mpps-state {
|
||||||
|
pins = "mpp2", "mpp3";
|
||||||
|
function = "digital";
|
||||||
|
|
||||||
|
output-low;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,826 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2015, The Linux Foundation. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "msm8916-pm8916.dtsi"
|
|
||||||
#include <dt-bindings/gpio/gpio.h>
|
|
||||||
#include <dt-bindings/input/input.h>
|
|
||||||
#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
|
|
||||||
#include <dt-bindings/pinctrl/qcom,pmic-mpp.h>
|
|
||||||
#include <dt-bindings/sound/apq8016-lpass.h>
|
|
||||||
|
|
||||||
/ {
|
|
||||||
aliases {
|
|
||||||
serial0 = &blsp1_uart2;
|
|
||||||
serial1 = &blsp1_uart1;
|
|
||||||
usid0 = &pm8916_0;
|
|
||||||
i2c0 = &blsp_i2c2;
|
|
||||||
i2c1 = &blsp_i2c6;
|
|
||||||
i2c3 = &blsp_i2c4;
|
|
||||||
spi0 = &blsp_spi5;
|
|
||||||
spi1 = &blsp_spi3;
|
|
||||||
};
|
|
||||||
|
|
||||||
chosen {
|
|
||||||
stdout-path = "serial0";
|
|
||||||
};
|
|
||||||
|
|
||||||
camera_vdddo_1v8: camera-vdddo-1v8 {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "camera_vdddo";
|
|
||||||
regulator-min-microvolt = <1800000>;
|
|
||||||
regulator-max-microvolt = <1800000>;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
camera_vdda_2v8: camera-vdda-2v8 {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "camera_vdda";
|
|
||||||
regulator-min-microvolt = <2800000>;
|
|
||||||
regulator-max-microvolt = <2800000>;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
camera_vddd_1v5: camera-vddd-1v5 {
|
|
||||||
compatible = "regulator-fixed";
|
|
||||||
regulator-name = "camera_vddd";
|
|
||||||
regulator-min-microvolt = <1500000>;
|
|
||||||
regulator-max-microvolt = <1500000>;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
reserved-memory {
|
|
||||||
ramoops@bff00000 {
|
|
||||||
compatible = "ramoops";
|
|
||||||
reg = <0x0 0xbff00000 0x0 0x100000>;
|
|
||||||
|
|
||||||
record-size = <0x20000>;
|
|
||||||
console-size = <0x20000>;
|
|
||||||
ftrace-size = <0x20000>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
usb2513 {
|
|
||||||
compatible = "smsc,usb3503";
|
|
||||||
reset-gpios = <&pm8916_gpios 3 GPIO_ACTIVE_LOW>;
|
|
||||||
initial-mode = <1>;
|
|
||||||
};
|
|
||||||
|
|
||||||
usb_id: usb-id {
|
|
||||||
compatible = "linux,extcon-usb-gpio";
|
|
||||||
id-gpio = <&msmgpio 121 GPIO_ACTIVE_HIGH>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&usb_id_default>;
|
|
||||||
};
|
|
||||||
|
|
||||||
hdmi-out {
|
|
||||||
compatible = "hdmi-connector";
|
|
||||||
type = "a";
|
|
||||||
|
|
||||||
port {
|
|
||||||
hdmi_con: endpoint {
|
|
||||||
remote-endpoint = <&adv7533_out>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
gpio-keys {
|
|
||||||
compatible = "gpio-keys";
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
autorepeat;
|
|
||||||
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&msm_key_volp_n_default>;
|
|
||||||
|
|
||||||
button@0 {
|
|
||||||
label = "Volume Up";
|
|
||||||
linux,code = <KEY_VOLUMEUP>;
|
|
||||||
gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
leds {
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&msmgpio_leds>,
|
|
||||||
<&pm8916_gpios_leds>,
|
|
||||||
<&pm8916_mpps_leds>;
|
|
||||||
|
|
||||||
compatible = "gpio-leds";
|
|
||||||
|
|
||||||
led@1 {
|
|
||||||
label = "apq8016-sbc:green:user1";
|
|
||||||
gpios = <&msmgpio 21 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "heartbeat";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@2 {
|
|
||||||
label = "apq8016-sbc:green:user2";
|
|
||||||
gpios = <&msmgpio 120 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "mmc0";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@3 {
|
|
||||||
label = "apq8016-sbc:green:user3";
|
|
||||||
gpios = <&pm8916_gpios 1 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "mmc1";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@4 {
|
|
||||||
label = "apq8016-sbc:green:user4";
|
|
||||||
gpios = <&pm8916_gpios 2 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "none";
|
|
||||||
panic-indicator;
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@5 {
|
|
||||||
label = "apq8016-sbc:yellow:wlan";
|
|
||||||
gpios = <&pm8916_mpps 2 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "phy0tx";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
|
|
||||||
led@6 {
|
|
||||||
label = "apq8016-sbc:blue:bt";
|
|
||||||
gpios = <&pm8916_mpps 3 GPIO_ACTIVE_HIGH>;
|
|
||||||
linux,default-trigger = "bluetooth-power";
|
|
||||||
default-state = "off";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_dma {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_i2c2 {
|
|
||||||
/* On Low speed expansion */
|
|
||||||
status = "okay";
|
|
||||||
label = "LS-I2C0";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_i2c4 {
|
|
||||||
/* On High speed expansion */
|
|
||||||
status = "okay";
|
|
||||||
label = "HS-I2C2";
|
|
||||||
|
|
||||||
adv_bridge: bridge@39 {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
compatible = "adi,adv7533";
|
|
||||||
reg = <0x39>;
|
|
||||||
|
|
||||||
interrupt-parent = <&msmgpio>;
|
|
||||||
interrupts = <31 IRQ_TYPE_EDGE_FALLING>;
|
|
||||||
|
|
||||||
adi,dsi-lanes = <4>;
|
|
||||||
clocks = <&rpmcc RPM_SMD_BB_CLK2>;
|
|
||||||
clock-names = "cec";
|
|
||||||
|
|
||||||
pd-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>;
|
|
||||||
|
|
||||||
avdd-supply = <&pm8916_l6>;
|
|
||||||
v1p2-supply = <&pm8916_l6>;
|
|
||||||
v3p3-supply = <&pm8916_l17>;
|
|
||||||
|
|
||||||
pinctrl-names = "default","sleep";
|
|
||||||
pinctrl-0 = <&adv7533_int_active &adv7533_switch_active>;
|
|
||||||
pinctrl-1 = <&adv7533_int_suspend &adv7533_switch_suspend>;
|
|
||||||
#sound-dai-cells = <1>;
|
|
||||||
|
|
||||||
ports {
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <0>;
|
|
||||||
|
|
||||||
port@0 {
|
|
||||||
reg = <0>;
|
|
||||||
adv7533_in: endpoint {
|
|
||||||
remote-endpoint = <&dsi0_out>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
port@1 {
|
|
||||||
reg = <1>;
|
|
||||||
adv7533_out: endpoint {
|
|
||||||
remote-endpoint = <&hdmi_con>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_i2c6 {
|
|
||||||
/* On Low speed expansion */
|
|
||||||
status = "okay";
|
|
||||||
label = "LS-I2C1";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_spi3 {
|
|
||||||
/* On High speed expansion */
|
|
||||||
status = "okay";
|
|
||||||
label = "HS-SPI1";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp_spi5 {
|
|
||||||
/* On Low speed expansion */
|
|
||||||
status = "okay";
|
|
||||||
label = "LS-SPI0";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp1_uart1 {
|
|
||||||
status = "okay";
|
|
||||||
label = "LS-UART0";
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp1_uart2 {
|
|
||||||
status = "okay";
|
|
||||||
label = "LS-UART1";
|
|
||||||
};
|
|
||||||
|
|
||||||
&camss {
|
|
||||||
status = "okay";
|
|
||||||
ports {
|
|
||||||
port@0 {
|
|
||||||
reg = <0>;
|
|
||||||
csiphy0_ep: endpoint {
|
|
||||||
clock-lanes = <1>;
|
|
||||||
data-lanes = <0 2>;
|
|
||||||
remote-endpoint = <&ov5640_ep>;
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&cci {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&cci_i2c0 {
|
|
||||||
camera_rear@3b {
|
|
||||||
compatible = "ovti,ov5640";
|
|
||||||
reg = <0x3b>;
|
|
||||||
|
|
||||||
enable-gpios = <&msmgpio 34 GPIO_ACTIVE_HIGH>;
|
|
||||||
reset-gpios = <&msmgpio 35 GPIO_ACTIVE_LOW>;
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&camera_rear_default>;
|
|
||||||
|
|
||||||
clocks = <&gcc GCC_CAMSS_MCLK0_CLK>;
|
|
||||||
clock-names = "xclk";
|
|
||||||
clock-frequency = <23880000>;
|
|
||||||
|
|
||||||
vdddo-supply = <&camera_vdddo_1v8>;
|
|
||||||
vdda-supply = <&camera_vdda_2v8>;
|
|
||||||
vddd-supply = <&camera_vddd_1v5>;
|
|
||||||
|
|
||||||
/* No camera mezzanine by default */
|
|
||||||
status = "disabled";
|
|
||||||
|
|
||||||
port {
|
|
||||||
ov5640_ep: endpoint {
|
|
||||||
clock-lanes = <1>;
|
|
||||||
data-lanes = <0 2>;
|
|
||||||
remote-endpoint = <&csiphy0_ep>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&dsi0_out {
|
|
||||||
data-lanes = <0 1 2 3>;
|
|
||||||
remote-endpoint = <&adv7533_in>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&lpass {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&mdss {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&pm8916_resin {
|
|
||||||
status = "okay";
|
|
||||||
linux,code = <KEY_VOLUMEDOWN>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&pronto {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&sdhc_1 {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
|
|
||||||
pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&sdhc_2 {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdc2_cd_on>;
|
|
||||||
pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdc2_cd_off>;
|
|
||||||
|
|
||||||
cd-gpios = <&msmgpio 38 GPIO_ACTIVE_LOW>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&sound {
|
|
||||||
status = "okay";
|
|
||||||
|
|
||||||
pinctrl-0 = <&cdc_pdm_lines_act &ext_sec_tlmm_lines_act &ext_mclk_tlmm_lines_act>;
|
|
||||||
pinctrl-1 = <&cdc_pdm_lines_sus &ext_sec_tlmm_lines_sus &ext_mclk_tlmm_lines_sus>;
|
|
||||||
pinctrl-names = "default", "sleep";
|
|
||||||
qcom,model = "DB410c";
|
|
||||||
qcom,audio-routing =
|
|
||||||
"AMIC2", "MIC BIAS Internal2",
|
|
||||||
"AMIC3", "MIC BIAS External1";
|
|
||||||
|
|
||||||
external-dai-link@0 {
|
|
||||||
link-name = "ADV7533";
|
|
||||||
cpu {
|
|
||||||
sound-dai = <&lpass MI2S_QUATERNARY>;
|
|
||||||
};
|
|
||||||
codec {
|
|
||||||
sound-dai = <&adv_bridge 0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
internal-codec-playback-dai-link@0 {
|
|
||||||
link-name = "WCD";
|
|
||||||
cpu {
|
|
||||||
sound-dai = <&lpass MI2S_PRIMARY>;
|
|
||||||
};
|
|
||||||
codec {
|
|
||||||
sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
internal-codec-capture-dai-link@0 {
|
|
||||||
link-name = "WCD-Capture";
|
|
||||||
cpu {
|
|
||||||
sound-dai = <&lpass MI2S_TERTIARY>;
|
|
||||||
};
|
|
||||||
codec {
|
|
||||||
sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&usb {
|
|
||||||
status = "okay";
|
|
||||||
extcon = <&usb_id>, <&usb_id>;
|
|
||||||
|
|
||||||
pinctrl-names = "default", "device";
|
|
||||||
pinctrl-0 = <&usb_sw_sel_pm &usb_hub_reset_pm>;
|
|
||||||
pinctrl-1 = <&usb_sw_sel_pm_device &usb_hub_reset_pm_device>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&usb_hs_phy {
|
|
||||||
extcon = <&usb_id>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&wcd_codec {
|
|
||||||
clocks = <&gcc GCC_CODEC_DIGCODEC_CLK>;
|
|
||||||
clock-names = "mclk";
|
|
||||||
qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
|
|
||||||
qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Enable CoreSight */
|
|
||||||
&cti0 { status = "okay"; };
|
|
||||||
&cti1 { status = "okay"; };
|
|
||||||
&cti12 { status = "okay"; };
|
|
||||||
&cti13 { status = "okay"; };
|
|
||||||
&cti14 { status = "okay"; };
|
|
||||||
&cti15 { status = "okay"; };
|
|
||||||
&debug0 { status = "okay"; };
|
|
||||||
&debug1 { status = "okay"; };
|
|
||||||
&debug2 { status = "okay"; };
|
|
||||||
&debug3 { status = "okay"; };
|
|
||||||
&etf { status = "okay"; };
|
|
||||||
&etm0 { status = "okay"; };
|
|
||||||
&etm1 { status = "okay"; };
|
|
||||||
&etm2 { status = "okay"; };
|
|
||||||
&etm3 { status = "okay"; };
|
|
||||||
&etr { status = "okay"; };
|
|
||||||
&funnel0 { status = "okay"; };
|
|
||||||
&funnel1 { status = "okay"; };
|
|
||||||
&replicator { status = "okay"; };
|
|
||||||
&stm { status = "okay"; };
|
|
||||||
&tpiu { status = "okay"; };
|
|
||||||
|
|
||||||
&smd_rpm_regulators {
|
|
||||||
vdd_l1_l2_l3-supply = <&pm8916_s3>;
|
|
||||||
vdd_l4_l5_l6-supply = <&pm8916_s4>;
|
|
||||||
vdd_l7-supply = <&pm8916_s4>;
|
|
||||||
|
|
||||||
s3 {
|
|
||||||
regulator-min-microvolt = <375000>;
|
|
||||||
regulator-max-microvolt = <1562000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
s4 {
|
|
||||||
regulator-min-microvolt = <1800000>;
|
|
||||||
regulator-max-microvolt = <1800000>;
|
|
||||||
|
|
||||||
regulator-always-on;
|
|
||||||
regulator-boot-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
l1 {
|
|
||||||
regulator-min-microvolt = <375000>;
|
|
||||||
regulator-max-microvolt = <1525000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l2 {
|
|
||||||
regulator-min-microvolt = <1200000>;
|
|
||||||
regulator-max-microvolt = <1200000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l4 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l5 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l6 {
|
|
||||||
regulator-min-microvolt = <1800000>;
|
|
||||||
regulator-max-microvolt = <1800000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l7 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l8 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l9 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l10 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l11 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
regulator-allow-set-load;
|
|
||||||
regulator-system-load = <200000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l12 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l13 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l14 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 1.8v required on LS expansion
|
|
||||||
* for mezzanine boards
|
|
||||||
*/
|
|
||||||
l15 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
regulator-always-on;
|
|
||||||
};
|
|
||||||
|
|
||||||
l16 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l17 {
|
|
||||||
regulator-min-microvolt = <3300000>;
|
|
||||||
regulator-max-microvolt = <3300000>;
|
|
||||||
};
|
|
||||||
|
|
||||||
l18 {
|
|
||||||
regulator-min-microvolt = <1750000>;
|
|
||||||
regulator-max-microvolt = <3337000>;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* 2mA drive strength is not enough when connecting multiple
|
|
||||||
* I2C devices with different pull up resistors.
|
|
||||||
*/
|
|
||||||
&i2c2_default {
|
|
||||||
drive-strength = <16>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&i2c4_default {
|
|
||||||
drive-strength = <16>;
|
|
||||||
};
|
|
||||||
|
|
||||||
&i2c6_default {
|
|
||||||
drive-strength = <16>;
|
|
||||||
};
|
|
||||||
|
|
||||||
/*
|
|
||||||
* GPIO name legend: proper name = the GPIO line is used as GPIO
|
|
||||||
* NC = not connected (pin out but not routed from the chip to
|
|
||||||
* anything the board)
|
|
||||||
* "[PER]" = pin is muxed for [peripheral] (not GPIO)
|
|
||||||
* LSEC = Low Speed External Connector
|
|
||||||
* HSEC = High Speed External Connector
|
|
||||||
*
|
|
||||||
* Line names are taken from the schematic "DragonBoard410c"
|
|
||||||
* dated monday, august 31, 2015. Page 5 in particular.
|
|
||||||
*
|
|
||||||
* For the lines routed to the external connectors the
|
|
||||||
* lines are named after the 96Boards CE Specification 1.0,
|
|
||||||
* Appendix "Expansion Connector Signal Description".
|
|
||||||
*
|
|
||||||
* When the 96Board naming of a line and the schematic name of
|
|
||||||
* the same line are in conflict, the 96Board specification
|
|
||||||
* takes precedence, which means that the external UART on the
|
|
||||||
* LSEC is named UART0 while the schematic and SoC names this
|
|
||||||
* UART3. This is only for the informational lines i.e. "[FOO]",
|
|
||||||
* the GPIO named lines "GPIO-A" thru "GPIO-L" are the only
|
|
||||||
* ones actually used for GPIO.
|
|
||||||
*/
|
|
||||||
|
|
||||||
&msmgpio {
|
|
||||||
gpio-line-names =
|
|
||||||
"[UART0_TX]", /* GPIO_0, LSEC pin 5 */
|
|
||||||
"[UART0_RX]", /* GPIO_1, LSEC pin 7 */
|
|
||||||
"[UART0_CTS_N]", /* GPIO_2, LSEC pin 3 */
|
|
||||||
"[UART0_RTS_N]", /* GPIO_3, LSEC pin 9 */
|
|
||||||
"[UART1_TX]", /* GPIO_4, LSEC pin 11 */
|
|
||||||
"[UART1_RX]", /* GPIO_5, LSEC pin 13 */
|
|
||||||
"[I2C0_SDA]", /* GPIO_8, LSEC pin 17 */
|
|
||||||
"[I2C0_SCL]", /* GPIO_7, LSEC pin 15 */
|
|
||||||
"[SPI1_DOUT]", /* SPI1_MOSI, HSEC pin 1 */
|
|
||||||
"[SPI1_DIN]", /* SPI1_MISO, HSEC pin 11 */
|
|
||||||
"[SPI1_CS]", /* SPI1_CS_N, HSEC pin 7 */
|
|
||||||
"[SPI1_SCLK]", /* SPI1_CLK, HSEC pin 9 */
|
|
||||||
"GPIO-B", /* LS_EXP_GPIO_B, LSEC pin 24 */
|
|
||||||
"GPIO-C", /* LS_EXP_GPIO_C, LSEC pin 25 */
|
|
||||||
"[I2C3_SDA]", /* HSEC pin 38 */
|
|
||||||
"[I2C3_SCL]", /* HSEC pin 36 */
|
|
||||||
"[SPI0_MOSI]", /* LSEC pin 14 */
|
|
||||||
"[SPI0_MISO]", /* LSEC pin 10 */
|
|
||||||
"[SPI0_CS_N]", /* LSEC pin 12 */
|
|
||||||
"[SPI0_CLK]", /* LSEC pin 8 */
|
|
||||||
"HDMI_HPD_N", /* GPIO 20 */
|
|
||||||
"USR_LED_1_CTRL",
|
|
||||||
"[I2C1_SDA]", /* GPIO_22, LSEC pin 21 */
|
|
||||||
"[I2C1_SCL]", /* GPIO_23, LSEC pin 19 */
|
|
||||||
"GPIO-G", /* LS_EXP_GPIO_G, LSEC pin 29 */
|
|
||||||
"GPIO-H", /* LS_EXP_GPIO_H, LSEC pin 30 */
|
|
||||||
"[CSI0_MCLK]", /* HSEC pin 15 */
|
|
||||||
"[CSI1_MCLK]", /* HSEC pin 17 */
|
|
||||||
"GPIO-K", /* LS_EXP_GPIO_K, LSEC pin 33 */
|
|
||||||
"[I2C2_SDA]", /* HSEC pin 34 */
|
|
||||||
"[I2C2_SCL]", /* HSEC pin 32 */
|
|
||||||
"DSI2HDMI_INT_N",
|
|
||||||
"DSI_SW_SEL_APQ",
|
|
||||||
"GPIO-L", /* LS_EXP_GPIO_L, LSEC pin 34 */
|
|
||||||
"GPIO-J", /* LS_EXP_GPIO_J, LSEC pin 32 */
|
|
||||||
"GPIO-I", /* LS_EXP_GPIO_I, LSEC pin 31 */
|
|
||||||
"GPIO-A", /* LS_EXP_GPIO_A, LSEC pin 23 */
|
|
||||||
"FORCED_USB_BOOT",
|
|
||||||
"SD_CARD_DET_N",
|
|
||||||
"[WCSS_BT_SSBI]",
|
|
||||||
"[WCSS_WLAN_DATA_2]", /* GPIO 40 */
|
|
||||||
"[WCSS_WLAN_DATA_1]",
|
|
||||||
"[WCSS_WLAN_DATA_0]",
|
|
||||||
"[WCSS_WLAN_SET]",
|
|
||||||
"[WCSS_WLAN_CLK]",
|
|
||||||
"[WCSS_FM_SSBI]",
|
|
||||||
"[WCSS_FM_SDI]",
|
|
||||||
"[WCSS_BT_DAT_CTL]",
|
|
||||||
"[WCSS_BT_DAT_STB]",
|
|
||||||
"NC",
|
|
||||||
"NC", /* GPIO 50 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC", /* GPIO 60 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"[CDC_PDM0_CLK]",
|
|
||||||
"[CDC_PDM0_SYNC]",
|
|
||||||
"[CDC_PDM0_TX0]",
|
|
||||||
"[CDC_PDM0_RX0]",
|
|
||||||
"[CDC_PDM0_RX1]",
|
|
||||||
"[CDC_PDM0_RX2]",
|
|
||||||
"GPIO-D", /* LS_EXP_GPIO_D, LSEC pin 26 */
|
|
||||||
"NC", /* GPIO 70 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC", /* GPIO 74 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"BOOT_CONFIG_0", /* GPIO 80 */
|
|
||||||
"BOOT_CONFIG_1",
|
|
||||||
"BOOT_CONFIG_2",
|
|
||||||
"BOOT_CONFIG_3",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"BOOT_CONFIG_5",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC", /* GPIO 90 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC", /* GPIO 100 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"SSBI_GPS",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"KEY_VOLP_N",
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"[LS_EXP_MI2S_WS]", /* GPIO 110 */
|
|
||||||
"NC",
|
|
||||||
"NC",
|
|
||||||
"[LS_EXP_MI2S_SCK]",
|
|
||||||
"[LS_EXP_MI2S_DATA0]",
|
|
||||||
"GPIO-E", /* LS_EXP_GPIO_E, LSEC pin 27 */
|
|
||||||
"NC",
|
|
||||||
"[DSI2HDMI_MI2S_WS]",
|
|
||||||
"[DSI2HDMI_MI2S_SCK]",
|
|
||||||
"[DSI2HDMI_MI2S_DATA0]",
|
|
||||||
"USR_LED_2_CTRL", /* GPIO 120 */
|
|
||||||
"SB_HS_ID";
|
|
||||||
|
|
||||||
msmgpio_leds: msmgpio-leds {
|
|
||||||
pins = "gpio21", "gpio120";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
|
|
||||||
usb_id_default: usb-id-default {
|
|
||||||
pins = "gpio121";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <8>;
|
|
||||||
input-enable;
|
|
||||||
bias-pull-up;
|
|
||||||
};
|
|
||||||
|
|
||||||
adv7533_int_active: adv533-int-active {
|
|
||||||
pins = "gpio31";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <16>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
|
|
||||||
adv7533_int_suspend: adv7533-int-suspend {
|
|
||||||
pins = "gpio31";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <2>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
|
|
||||||
adv7533_switch_active: adv7533-switch-active {
|
|
||||||
pins = "gpio32";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <16>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
|
|
||||||
adv7533_switch_suspend: adv7533-switch-suspend {
|
|
||||||
pins = "gpio32";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <2>;
|
|
||||||
bias-disable;
|
|
||||||
};
|
|
||||||
|
|
||||||
msm_key_volp_n_default: msm-key-volp-n-default {
|
|
||||||
pins = "gpio107";
|
|
||||||
function = "gpio";
|
|
||||||
|
|
||||||
drive-strength = <8>;
|
|
||||||
input-enable;
|
|
||||||
bias-pull-up;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&pm8916_gpios {
|
|
||||||
gpio-line-names =
|
|
||||||
"USR_LED_3_CTRL",
|
|
||||||
"USR_LED_4_CTRL",
|
|
||||||
"USB_HUB_RESET_N_PM",
|
|
||||||
"USB_SW_SEL_PM";
|
|
||||||
|
|
||||||
usb_hub_reset_pm: usb-hub-reset-pm {
|
|
||||||
pins = "gpio3";
|
|
||||||
function = PMIC_GPIO_FUNC_NORMAL;
|
|
||||||
|
|
||||||
input-disable;
|
|
||||||
output-high;
|
|
||||||
};
|
|
||||||
|
|
||||||
usb_hub_reset_pm_device: usb-hub-reset-pm-device {
|
|
||||||
pins = "gpio3";
|
|
||||||
function = PMIC_GPIO_FUNC_NORMAL;
|
|
||||||
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
|
|
||||||
usb_sw_sel_pm: usb-sw-sel-pm {
|
|
||||||
pins = "gpio4";
|
|
||||||
function = PMIC_GPIO_FUNC_NORMAL;
|
|
||||||
|
|
||||||
power-source = <PM8916_GPIO_VPH>;
|
|
||||||
input-disable;
|
|
||||||
output-high;
|
|
||||||
};
|
|
||||||
|
|
||||||
usb_sw_sel_pm_device: usb-sw-sel-pm-device {
|
|
||||||
pins = "gpio4";
|
|
||||||
function = PMIC_GPIO_FUNC_NORMAL;
|
|
||||||
|
|
||||||
power-source = <PM8916_GPIO_VPH>;
|
|
||||||
input-disable;
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
|
|
||||||
pm8916_gpios_leds: pm8916-gpios-leds {
|
|
||||||
pins = "gpio1", "gpio2";
|
|
||||||
function = PMIC_GPIO_FUNC_NORMAL;
|
|
||||||
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&pm8916_mpps {
|
|
||||||
gpio-line-names =
|
|
||||||
"VDD_PX_BIAS",
|
|
||||||
"WLAN_LED_CTRL",
|
|
||||||
"BT_LED_CTRL",
|
|
||||||
"GPIO-F"; /* LS_EXP_GPIO_F, LSEC pin 28 */
|
|
||||||
|
|
||||||
pinctrl-names = "default";
|
|
||||||
pinctrl-0 = <&ls_exp_gpio_f>;
|
|
||||||
|
|
||||||
ls_exp_gpio_f: pm8916-mpp4 {
|
|
||||||
pins = "mpp4";
|
|
||||||
function = "digital";
|
|
||||||
|
|
||||||
output-low;
|
|
||||||
power-source = <PM8916_MPP_L5>; // 1.8V
|
|
||||||
};
|
|
||||||
|
|
||||||
pm8916_mpps_leds: pm8916-mpps-leds {
|
|
||||||
pins = "mpp2", "mpp3";
|
|
||||||
function = "digital";
|
|
||||||
|
|
||||||
output-low;
|
|
||||||
};
|
|
||||||
};
|
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@
|
|||||||
|
|
||||||
v1p05: v1p05-regulator {
|
v1p05: v1p05-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
reglator-name = "v1p05";
|
regulator-name = "v1p05";
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
|
|
||||||
@@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
v12_poe: v12-poe-regulator {
|
v12_poe: v12-poe-regulator {
|
||||||
compatible = "regulator-fixed";
|
compatible = "regulator-fixed";
|
||||||
reglator-name = "v12_poe";
|
regulator-name = "v12_poe";
|
||||||
regulator-always-on;
|
regulator-always-on;
|
||||||
regulator-boot-on;
|
regulator-boot-on;
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,22 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "msm8916-mtp.dtsi"
|
#include "msm8916-pm8916.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Qualcomm Technologies, Inc. MSM 8916 MTP";
|
model = "Qualcomm Technologies, Inc. MSM 8916 MTP";
|
||||||
compatible = "qcom,msm8916-mtp", "qcom,msm8916-mtp/1", "qcom,msm8916";
|
compatible = "qcom,msm8916-mtp", "qcom,msm8916-mtp/1", "qcom,msm8916";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &blsp1_uart2;
|
||||||
|
usid0 = &pm8916_0;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = "serial0";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&blsp1_uart2 {
|
||||||
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "msm8916-pm8916.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
aliases {
|
|
||||||
serial0 = &blsp1_uart2;
|
|
||||||
usid0 = &pm8916_0;
|
|
||||||
};
|
|
||||||
|
|
||||||
chosen {
|
|
||||||
stdout-path = "serial0";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&blsp1_uart2 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
@@ -1064,7 +1064,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
camss: camss@1b00000 {
|
camss: camss@1b0ac00 {
|
||||||
compatible = "qcom,msm8916-camss";
|
compatible = "qcom,msm8916-camss";
|
||||||
reg = <0x01b0ac00 0x200>,
|
reg = <0x01b0ac00 0x200>,
|
||||||
<0x01b00030 0x4>,
|
<0x01b00030 0x4>,
|
||||||
@@ -1771,7 +1771,7 @@
|
|||||||
|
|
||||||
label = "pronto";
|
label = "pronto";
|
||||||
|
|
||||||
wcnss {
|
wcnss_ctrl: wcnss {
|
||||||
compatible = "qcom,wcnss";
|
compatible = "qcom,wcnss";
|
||||||
qcom,smd-channels = "WCNSS_CTRL";
|
qcom,smd-channels = "WCNSS_CTRL";
|
||||||
|
|
||||||
|
|||||||
@@ -725,7 +725,7 @@
|
|||||||
reg = <0xfc4ab000 0x4>;
|
reg = <0xfc4ab000 0x4>;
|
||||||
};
|
};
|
||||||
|
|
||||||
spmi_bus: spmi@fc4c0000 {
|
spmi_bus: spmi@fc4cf000 {
|
||||||
compatible = "qcom,spmi-pmic-arb";
|
compatible = "qcom,spmi-pmic-arb";
|
||||||
reg = <0xfc4cf000 0x1000>,
|
reg = <0xfc4cf000 0x1000>,
|
||||||
<0xfc4cb000 0x1000>,
|
<0xfc4cb000 0x1000>,
|
||||||
|
|||||||
@@ -5,9 +5,31 @@
|
|||||||
|
|
||||||
/dts-v1/;
|
/dts-v1/;
|
||||||
|
|
||||||
#include "msm8996-mtp.dtsi"
|
#include "msm8996.dtsi"
|
||||||
|
|
||||||
/ {
|
/ {
|
||||||
model = "Qualcomm Technologies, Inc. MSM 8996 MTP";
|
model = "Qualcomm Technologies, Inc. MSM 8996 MTP";
|
||||||
compatible = "qcom,msm8996-mtp";
|
compatible = "qcom,msm8996-mtp";
|
||||||
|
|
||||||
|
aliases {
|
||||||
|
serial0 = &blsp2_uart2;
|
||||||
|
};
|
||||||
|
|
||||||
|
chosen {
|
||||||
|
stdout-path = "serial0";
|
||||||
|
};
|
||||||
|
|
||||||
|
soc {
|
||||||
|
serial@75b0000 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_phy {
|
||||||
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,30 +0,0 @@
|
|||||||
// SPDX-License-Identifier: GPL-2.0-only
|
|
||||||
/*
|
|
||||||
* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "msm8996.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
aliases {
|
|
||||||
serial0 = &blsp2_uart2;
|
|
||||||
};
|
|
||||||
|
|
||||||
chosen {
|
|
||||||
stdout-path = "serial0";
|
|
||||||
};
|
|
||||||
|
|
||||||
soc {
|
|
||||||
serial@75b0000 {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
&hdmi {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
|
|
||||||
&hdmi_phy {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
||||||
@@ -1228,6 +1228,20 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
blsp1_uart2_default: blsp1-uart2-default {
|
||||||
|
pins = "gpio41", "gpio42", "gpio43", "gpio44";
|
||||||
|
function = "blsp_uart2";
|
||||||
|
drive-strength = <16>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
|
blsp1_uart2_sleep: blsp1-uart2-sleep {
|
||||||
|
pins = "gpio41", "gpio42", "gpio43", "gpio44";
|
||||||
|
function = "gpio";
|
||||||
|
drive-strength = <2>;
|
||||||
|
bias-disable;
|
||||||
|
};
|
||||||
|
|
||||||
blsp1_i2c3_default: blsp1-i2c2-default {
|
blsp1_i2c3_default: blsp1-i2c2-default {
|
||||||
pins = "gpio47", "gpio48";
|
pins = "gpio47", "gpio48";
|
||||||
function = "blsp_i2c3";
|
function = "blsp_i2c3";
|
||||||
@@ -1771,7 +1785,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
camss: camss@a00000 {
|
camss: camss@a34000 {
|
||||||
compatible = "qcom,msm8996-camss";
|
compatible = "qcom,msm8996-camss";
|
||||||
reg = <0x00a34000 0x1000>,
|
reg = <0x00a34000 0x1000>,
|
||||||
<0x00a00030 0x4>,
|
<0x00a00030 0x4>,
|
||||||
@@ -2724,6 +2738,9 @@
|
|||||||
clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>,
|
clocks = <&gcc GCC_BLSP1_UART2_APPS_CLK>,
|
||||||
<&gcc GCC_BLSP1_AHB_CLK>;
|
<&gcc GCC_BLSP1_AHB_CLK>;
|
||||||
clock-names = "core", "iface";
|
clock-names = "core", "iface";
|
||||||
|
pinctrl-names = "default", "sleep";
|
||||||
|
pinctrl-0 = <&blsp1_uart2_default>;
|
||||||
|
pinctrl-1 = <&blsp1_uart2_sleep>;
|
||||||
dmas = <&blsp1_dma 2>, <&blsp1_dma 3>;
|
dmas = <&blsp1_dma 2>, <&blsp1_dma 3>;
|
||||||
dma-names = "tx", "rx";
|
dma-names = "tx", "rx";
|
||||||
status = "disabled";
|
status = "disabled";
|
||||||
|
|||||||
@@ -1834,7 +1834,7 @@
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
camss: camss@ca00000 {
|
camss: camss@ca00020 {
|
||||||
compatible = "qcom,sdm660-camss";
|
compatible = "qcom,sdm660-camss";
|
||||||
reg = <0x0c824000 0x1000>,
|
reg = <0x0c824000 0x1000>,
|
||||||
<0x0ca00120 0x4>,
|
<0x0ca00120 0x4>,
|
||||||
|
|||||||
@@ -3921,7 +3921,7 @@
|
|||||||
#reset-cells = <1>;
|
#reset-cells = <1>;
|
||||||
};
|
};
|
||||||
|
|
||||||
camss: camss@a00000 {
|
camss: camss@acb3000 {
|
||||||
compatible = "qcom,sdm845-camss";
|
compatible = "qcom,sdm845-camss";
|
||||||
|
|
||||||
reg = <0 0xacb3000 0 0x1000>,
|
reg = <0 0xacb3000 0 0x1000>,
|
||||||
|
|||||||
@@ -26,9 +26,10 @@
|
|||||||
framebuffer: framebuffer@9c000000 {
|
framebuffer: framebuffer@9c000000 {
|
||||||
compatible = "simple-framebuffer";
|
compatible = "simple-framebuffer";
|
||||||
reg = <0 0x9c000000 0 0x2300000>;
|
reg = <0 0x9c000000 0 0x2300000>;
|
||||||
width = <1644>;
|
/* pdx203 BL initializes in 2.5k mode, not 4k */
|
||||||
height = <3840>;
|
width = <1096>;
|
||||||
stride = <(1644 * 4)>;
|
height = <2560>;
|
||||||
|
stride = <(1096 * 4)>;
|
||||||
format = "a8r8g8b8";
|
format = "a8r8g8b8";
|
||||||
/*
|
/*
|
||||||
* That's a lot of clocks, but it's necessary due
|
* That's a lot of clocks, but it's necessary due
|
||||||
|
|||||||
@@ -270,7 +270,7 @@
|
|||||||
};
|
};
|
||||||
|
|
||||||
scif1_pins: scif1 {
|
scif1_pins: scif1 {
|
||||||
groups = "scif1_data_b", "scif1_ctrl";
|
groups = "scif1_data_b";
|
||||||
function = "scif1";
|
function = "scif1";
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -330,7 +330,6 @@
|
|||||||
&scif1 {
|
&scif1 {
|
||||||
pinctrl-0 = <&scif1_pins>;
|
pinctrl-0 = <&scif1_pins>;
|
||||||
pinctrl-names = "default";
|
pinctrl-names = "default";
|
||||||
uart-has-rtscts;
|
|
||||||
|
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -80,25 +80,25 @@
|
|||||||
&wkup_pmx2 {
|
&wkup_pmx2 {
|
||||||
mcu_cpsw_pins_default: mcu-cpsw-pins-default {
|
mcu_cpsw_pins_default: mcu-cpsw-pins-default {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
J721E_WKUP_IOPAD(0x0068, PIN_OUTPUT, 0) /* MCU_RGMII1_TX_CTL */
|
J721E_WKUP_IOPAD(0x0000, PIN_OUTPUT, 0) /* MCU_RGMII1_TX_CTL */
|
||||||
J721E_WKUP_IOPAD(0x006c, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */
|
J721E_WKUP_IOPAD(0x0004, PIN_INPUT, 0) /* MCU_RGMII1_RX_CTL */
|
||||||
J721E_WKUP_IOPAD(0x0070, PIN_OUTPUT, 0) /* MCU_RGMII1_TD3 */
|
J721E_WKUP_IOPAD(0x0008, PIN_OUTPUT, 0) /* MCU_RGMII1_TD3 */
|
||||||
J721E_WKUP_IOPAD(0x0074, PIN_OUTPUT, 0) /* MCU_RGMII1_TD2 */
|
J721E_WKUP_IOPAD(0x000c, PIN_OUTPUT, 0) /* MCU_RGMII1_TD2 */
|
||||||
J721E_WKUP_IOPAD(0x0078, PIN_OUTPUT, 0) /* MCU_RGMII1_TD1 */
|
J721E_WKUP_IOPAD(0x0010, PIN_OUTPUT, 0) /* MCU_RGMII1_TD1 */
|
||||||
J721E_WKUP_IOPAD(0x007c, PIN_OUTPUT, 0) /* MCU_RGMII1_TD0 */
|
J721E_WKUP_IOPAD(0x0014, PIN_OUTPUT, 0) /* MCU_RGMII1_TD0 */
|
||||||
J721E_WKUP_IOPAD(0x0088, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */
|
J721E_WKUP_IOPAD(0x0020, PIN_INPUT, 0) /* MCU_RGMII1_RD3 */
|
||||||
J721E_WKUP_IOPAD(0x008c, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */
|
J721E_WKUP_IOPAD(0x0024, PIN_INPUT, 0) /* MCU_RGMII1_RD2 */
|
||||||
J721E_WKUP_IOPAD(0x0090, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */
|
J721E_WKUP_IOPAD(0x0028, PIN_INPUT, 0) /* MCU_RGMII1_RD1 */
|
||||||
J721E_WKUP_IOPAD(0x0094, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */
|
J721E_WKUP_IOPAD(0x002c, PIN_INPUT, 0) /* MCU_RGMII1_RD0 */
|
||||||
J721E_WKUP_IOPAD(0x0080, PIN_OUTPUT, 0) /* MCU_RGMII1_TXC */
|
J721E_WKUP_IOPAD(0x0018, PIN_OUTPUT, 0) /* MCU_RGMII1_TXC */
|
||||||
J721E_WKUP_IOPAD(0x0084, PIN_INPUT, 0) /* MCU_RGMII1_RXC */
|
J721E_WKUP_IOPAD(0x001c, PIN_INPUT, 0) /* MCU_RGMII1_RXC */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
|
|
||||||
mcu_mdio_pins_default: mcu-mdio1-pins-default {
|
mcu_mdio_pins_default: mcu-mdio1-pins-default {
|
||||||
pinctrl-single,pins = <
|
pinctrl-single,pins = <
|
||||||
J721E_WKUP_IOPAD(0x009c, PIN_OUTPUT, 0) /* (L1) MCU_MDIO0_MDC */
|
J721E_WKUP_IOPAD(0x0034, PIN_OUTPUT, 0) /* (L1) MCU_MDIO0_MDC */
|
||||||
J721E_WKUP_IOPAD(0x0098, PIN_INPUT, 0) /* (L4) MCU_MDIO0_MDIO */
|
J721E_WKUP_IOPAD(0x0030, PIN_INPUT, 0) /* (L4) MCU_MDIO0_MDIO */
|
||||||
>;
|
>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -489,6 +489,7 @@ CONFIG_USB_HIDDEV=y
|
|||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
CONFIG_USB_OTG=y
|
CONFIG_USB_OTG=y
|
||||||
CONFIG_USB_XHCI_HCD=y
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_PCI_RENESAS=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ static inline bool prom_is_rex(u32 magic)
|
|||||||
*/
|
*/
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int pagesize;
|
int pagesize;
|
||||||
unsigned char bitmap[0];
|
unsigned char bitmap[];
|
||||||
} memmap;
|
} memmap;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -318,7 +318,7 @@ struct kvm_vcpu_arch {
|
|||||||
unsigned int aux_inuse;
|
unsigned int aux_inuse;
|
||||||
|
|
||||||
/* COP0 State */
|
/* COP0 State */
|
||||||
struct mips_coproc *cop0;
|
struct mips_coproc cop0;
|
||||||
|
|
||||||
/* Resume PC after MMIO completion */
|
/* Resume PC after MMIO completion */
|
||||||
unsigned long io_pc;
|
unsigned long io_pc;
|
||||||
@@ -699,7 +699,7 @@ static inline bool kvm_mips_guest_can_have_fpu(struct kvm_vcpu_arch *vcpu)
|
|||||||
static inline bool kvm_mips_guest_has_fpu(struct kvm_vcpu_arch *vcpu)
|
static inline bool kvm_mips_guest_has_fpu(struct kvm_vcpu_arch *vcpu)
|
||||||
{
|
{
|
||||||
return kvm_mips_guest_can_have_fpu(vcpu) &&
|
return kvm_mips_guest_can_have_fpu(vcpu) &&
|
||||||
kvm_read_c0_guest_config1(vcpu->cop0) & MIPS_CONF1_FP;
|
kvm_read_c0_guest_config1(&vcpu->cop0) & MIPS_CONF1_FP;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline bool kvm_mips_guest_can_have_msa(struct kvm_vcpu_arch *vcpu)
|
static inline bool kvm_mips_guest_can_have_msa(struct kvm_vcpu_arch *vcpu)
|
||||||
@@ -711,7 +711,7 @@ static inline bool kvm_mips_guest_can_have_msa(struct kvm_vcpu_arch *vcpu)
|
|||||||
static inline bool kvm_mips_guest_has_msa(struct kvm_vcpu_arch *vcpu)
|
static inline bool kvm_mips_guest_has_msa(struct kvm_vcpu_arch *vcpu)
|
||||||
{
|
{
|
||||||
return kvm_mips_guest_can_have_msa(vcpu) &&
|
return kvm_mips_guest_can_have_msa(vcpu) &&
|
||||||
kvm_read_c0_guest_config3(vcpu->cop0) & MIPS_CONF3_MSA;
|
kvm_read_c0_guest_config3(&vcpu->cop0) & MIPS_CONF3_MSA;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct kvm_mips_callbacks {
|
struct kvm_mips_callbacks {
|
||||||
|
|||||||
@@ -1734,7 +1734,10 @@ static inline void decode_cpucfg(struct cpuinfo_mips *c)
|
|||||||
|
|
||||||
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
||||||
{
|
{
|
||||||
|
c->cputype = CPU_LOONGSON64;
|
||||||
|
|
||||||
/* All Loongson processors covered here define ExcCode 16 as GSExc. */
|
/* All Loongson processors covered here define ExcCode 16 as GSExc. */
|
||||||
|
decode_configs(c);
|
||||||
c->options |= MIPS_CPU_GSEXCEX;
|
c->options |= MIPS_CPU_GSEXCEX;
|
||||||
|
|
||||||
switch (c->processor_id & PRID_IMP_MASK) {
|
switch (c->processor_id & PRID_IMP_MASK) {
|
||||||
@@ -1744,7 +1747,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
case PRID_REV_LOONGSON2K_R1_1:
|
case PRID_REV_LOONGSON2K_R1_1:
|
||||||
case PRID_REV_LOONGSON2K_R1_2:
|
case PRID_REV_LOONGSON2K_R1_2:
|
||||||
case PRID_REV_LOONGSON2K_R1_3:
|
case PRID_REV_LOONGSON2K_R1_3:
|
||||||
c->cputype = CPU_LOONGSON64;
|
|
||||||
__cpu_name[cpu] = "Loongson-2K";
|
__cpu_name[cpu] = "Loongson-2K";
|
||||||
set_elf_platform(cpu, "gs264e");
|
set_elf_platform(cpu, "gs264e");
|
||||||
set_isa(c, MIPS_CPU_ISA_M64R2);
|
set_isa(c, MIPS_CPU_ISA_M64R2);
|
||||||
@@ -1757,14 +1759,12 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
switch (c->processor_id & PRID_REV_MASK) {
|
switch (c->processor_id & PRID_REV_MASK) {
|
||||||
case PRID_REV_LOONGSON3A_R2_0:
|
case PRID_REV_LOONGSON3A_R2_0:
|
||||||
case PRID_REV_LOONGSON3A_R2_1:
|
case PRID_REV_LOONGSON3A_R2_1:
|
||||||
c->cputype = CPU_LOONGSON64;
|
|
||||||
__cpu_name[cpu] = "ICT Loongson-3";
|
__cpu_name[cpu] = "ICT Loongson-3";
|
||||||
set_elf_platform(cpu, "loongson3a");
|
set_elf_platform(cpu, "loongson3a");
|
||||||
set_isa(c, MIPS_CPU_ISA_M64R2);
|
set_isa(c, MIPS_CPU_ISA_M64R2);
|
||||||
break;
|
break;
|
||||||
case PRID_REV_LOONGSON3A_R3_0:
|
case PRID_REV_LOONGSON3A_R3_0:
|
||||||
case PRID_REV_LOONGSON3A_R3_1:
|
case PRID_REV_LOONGSON3A_R3_1:
|
||||||
c->cputype = CPU_LOONGSON64;
|
|
||||||
__cpu_name[cpu] = "ICT Loongson-3";
|
__cpu_name[cpu] = "ICT Loongson-3";
|
||||||
set_elf_platform(cpu, "loongson3a");
|
set_elf_platform(cpu, "loongson3a");
|
||||||
set_isa(c, MIPS_CPU_ISA_M64R2);
|
set_isa(c, MIPS_CPU_ISA_M64R2);
|
||||||
@@ -1784,7 +1784,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
c->ases &= ~MIPS_ASE_VZ; /* VZ of Loongson-3A2000/3000 is incomplete */
|
c->ases &= ~MIPS_ASE_VZ; /* VZ of Loongson-3A2000/3000 is incomplete */
|
||||||
break;
|
break;
|
||||||
case PRID_IMP_LOONGSON_64G:
|
case PRID_IMP_LOONGSON_64G:
|
||||||
c->cputype = CPU_LOONGSON64;
|
|
||||||
__cpu_name[cpu] = "ICT Loongson-3";
|
__cpu_name[cpu] = "ICT Loongson-3";
|
||||||
set_elf_platform(cpu, "loongson3a");
|
set_elf_platform(cpu, "loongson3a");
|
||||||
set_isa(c, MIPS_CPU_ISA_M64R2);
|
set_isa(c, MIPS_CPU_ISA_M64R2);
|
||||||
@@ -1794,8 +1793,6 @@ static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu)
|
|||||||
panic("Unknown Loongson Processor ID!");
|
panic("Unknown Loongson Processor ID!");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
decode_configs(c);
|
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) { }
|
static inline void cpu_probe_loongson(struct cpuinfo_mips *c, unsigned int cpu) { }
|
||||||
|
|||||||
@@ -312,7 +312,7 @@ int kvm_get_badinstrp(u32 *opc, struct kvm_vcpu *vcpu, u32 *out)
|
|||||||
*/
|
*/
|
||||||
int kvm_mips_count_disabled(struct kvm_vcpu *vcpu)
|
int kvm_mips_count_disabled(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
|
|
||||||
return (vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC) ||
|
return (vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC) ||
|
||||||
(kvm_read_c0_guest_cause(cop0) & CAUSEF_DC);
|
(kvm_read_c0_guest_cause(cop0) & CAUSEF_DC);
|
||||||
@@ -384,7 +384,7 @@ static inline ktime_t kvm_mips_count_time(struct kvm_vcpu *vcpu)
|
|||||||
*/
|
*/
|
||||||
static u32 kvm_mips_read_count_running(struct kvm_vcpu *vcpu, ktime_t now)
|
static u32 kvm_mips_read_count_running(struct kvm_vcpu *vcpu, ktime_t now)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
ktime_t expires, threshold;
|
ktime_t expires, threshold;
|
||||||
u32 count, compare;
|
u32 count, compare;
|
||||||
int running;
|
int running;
|
||||||
@@ -444,7 +444,7 @@ static u32 kvm_mips_read_count_running(struct kvm_vcpu *vcpu, ktime_t now)
|
|||||||
*/
|
*/
|
||||||
u32 kvm_mips_read_count(struct kvm_vcpu *vcpu)
|
u32 kvm_mips_read_count(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
|
|
||||||
/* If count disabled just read static copy of count */
|
/* If count disabled just read static copy of count */
|
||||||
if (kvm_mips_count_disabled(vcpu))
|
if (kvm_mips_count_disabled(vcpu))
|
||||||
@@ -502,7 +502,7 @@ ktime_t kvm_mips_freeze_hrtimer(struct kvm_vcpu *vcpu, u32 *count)
|
|||||||
static void kvm_mips_resume_hrtimer(struct kvm_vcpu *vcpu,
|
static void kvm_mips_resume_hrtimer(struct kvm_vcpu *vcpu,
|
||||||
ktime_t now, u32 count)
|
ktime_t now, u32 count)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
u32 compare;
|
u32 compare;
|
||||||
u64 delta;
|
u64 delta;
|
||||||
ktime_t expire;
|
ktime_t expire;
|
||||||
@@ -603,7 +603,7 @@ resume:
|
|||||||
*/
|
*/
|
||||||
void kvm_mips_write_count(struct kvm_vcpu *vcpu, u32 count)
|
void kvm_mips_write_count(struct kvm_vcpu *vcpu, u32 count)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
ktime_t now;
|
ktime_t now;
|
||||||
|
|
||||||
/* Calculate bias */
|
/* Calculate bias */
|
||||||
@@ -649,7 +649,7 @@ void kvm_mips_init_count(struct kvm_vcpu *vcpu, unsigned long count_hz)
|
|||||||
*/
|
*/
|
||||||
int kvm_mips_set_count_hz(struct kvm_vcpu *vcpu, s64 count_hz)
|
int kvm_mips_set_count_hz(struct kvm_vcpu *vcpu, s64 count_hz)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
int dc;
|
int dc;
|
||||||
ktime_t now;
|
ktime_t now;
|
||||||
u32 count;
|
u32 count;
|
||||||
@@ -696,7 +696,7 @@ int kvm_mips_set_count_hz(struct kvm_vcpu *vcpu, s64 count_hz)
|
|||||||
*/
|
*/
|
||||||
void kvm_mips_write_compare(struct kvm_vcpu *vcpu, u32 compare, bool ack)
|
void kvm_mips_write_compare(struct kvm_vcpu *vcpu, u32 compare, bool ack)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
int dc;
|
int dc;
|
||||||
u32 old_compare = kvm_read_c0_guest_compare(cop0);
|
u32 old_compare = kvm_read_c0_guest_compare(cop0);
|
||||||
s32 delta = compare - old_compare;
|
s32 delta = compare - old_compare;
|
||||||
@@ -779,7 +779,7 @@ void kvm_mips_write_compare(struct kvm_vcpu *vcpu, u32 compare, bool ack)
|
|||||||
*/
|
*/
|
||||||
static ktime_t kvm_mips_count_disable(struct kvm_vcpu *vcpu)
|
static ktime_t kvm_mips_count_disable(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
u32 count;
|
u32 count;
|
||||||
ktime_t now;
|
ktime_t now;
|
||||||
|
|
||||||
@@ -806,7 +806,7 @@ static ktime_t kvm_mips_count_disable(struct kvm_vcpu *vcpu)
|
|||||||
*/
|
*/
|
||||||
void kvm_mips_count_disable_cause(struct kvm_vcpu *vcpu)
|
void kvm_mips_count_disable_cause(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
|
|
||||||
kvm_set_c0_guest_cause(cop0, CAUSEF_DC);
|
kvm_set_c0_guest_cause(cop0, CAUSEF_DC);
|
||||||
if (!(vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC))
|
if (!(vcpu->arch.count_ctl & KVM_REG_MIPS_COUNT_CTL_DC))
|
||||||
@@ -826,7 +826,7 @@ void kvm_mips_count_disable_cause(struct kvm_vcpu *vcpu)
|
|||||||
*/
|
*/
|
||||||
void kvm_mips_count_enable_cause(struct kvm_vcpu *vcpu)
|
void kvm_mips_count_enable_cause(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
u32 count;
|
u32 count;
|
||||||
|
|
||||||
kvm_clear_c0_guest_cause(cop0, CAUSEF_DC);
|
kvm_clear_c0_guest_cause(cop0, CAUSEF_DC);
|
||||||
@@ -852,7 +852,7 @@ void kvm_mips_count_enable_cause(struct kvm_vcpu *vcpu)
|
|||||||
*/
|
*/
|
||||||
int kvm_mips_set_count_ctl(struct kvm_vcpu *vcpu, s64 count_ctl)
|
int kvm_mips_set_count_ctl(struct kvm_vcpu *vcpu, s64 count_ctl)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
s64 changed = count_ctl ^ vcpu->arch.count_ctl;
|
s64 changed = count_ctl ^ vcpu->arch.count_ctl;
|
||||||
s64 delta;
|
s64 delta;
|
||||||
ktime_t expire, now;
|
ktime_t expire, now;
|
||||||
|
|||||||
@@ -652,7 +652,7 @@ static int kvm_mips_copy_reg_indices(struct kvm_vcpu *vcpu, u64 __user *indices)
|
|||||||
static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
|
static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
|
||||||
const struct kvm_one_reg *reg)
|
const struct kvm_one_reg *reg)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
struct mips_fpu_struct *fpu = &vcpu->arch.fpu;
|
struct mips_fpu_struct *fpu = &vcpu->arch.fpu;
|
||||||
int ret;
|
int ret;
|
||||||
s64 v;
|
s64 v;
|
||||||
@@ -764,7 +764,7 @@ static int kvm_mips_get_reg(struct kvm_vcpu *vcpu,
|
|||||||
static int kvm_mips_set_reg(struct kvm_vcpu *vcpu,
|
static int kvm_mips_set_reg(struct kvm_vcpu *vcpu,
|
||||||
const struct kvm_one_reg *reg)
|
const struct kvm_one_reg *reg)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
struct mips_fpu_struct *fpu = &vcpu->arch.fpu;
|
struct mips_fpu_struct *fpu = &vcpu->arch.fpu;
|
||||||
s64 v;
|
s64 v;
|
||||||
s64 vs[2];
|
s64 vs[2];
|
||||||
@@ -1104,7 +1104,7 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
|
|||||||
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
|
int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
return kvm_mips_pending_timer(vcpu) ||
|
return kvm_mips_pending_timer(vcpu) ||
|
||||||
kvm_read_c0_guest_cause(vcpu->arch.cop0) & C_TI;
|
kvm_read_c0_guest_cause(&vcpu->arch.cop0) & C_TI;
|
||||||
}
|
}
|
||||||
|
|
||||||
int kvm_arch_vcpu_dump_regs(struct kvm_vcpu *vcpu)
|
int kvm_arch_vcpu_dump_regs(struct kvm_vcpu *vcpu)
|
||||||
@@ -1128,7 +1128,7 @@ int kvm_arch_vcpu_dump_regs(struct kvm_vcpu *vcpu)
|
|||||||
kvm_debug("\thi: 0x%08lx\n", vcpu->arch.hi);
|
kvm_debug("\thi: 0x%08lx\n", vcpu->arch.hi);
|
||||||
kvm_debug("\tlo: 0x%08lx\n", vcpu->arch.lo);
|
kvm_debug("\tlo: 0x%08lx\n", vcpu->arch.lo);
|
||||||
|
|
||||||
cop0 = vcpu->arch.cop0;
|
cop0 = &vcpu->arch.cop0;
|
||||||
kvm_debug("\tStatus: 0x%08x, Cause: 0x%08x\n",
|
kvm_debug("\tStatus: 0x%08x, Cause: 0x%08x\n",
|
||||||
kvm_read_c0_guest_status(cop0),
|
kvm_read_c0_guest_status(cop0),
|
||||||
kvm_read_c0_guest_cause(cop0));
|
kvm_read_c0_guest_cause(cop0));
|
||||||
@@ -1250,7 +1250,7 @@ int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
case EXCCODE_TLBS:
|
case EXCCODE_TLBS:
|
||||||
kvm_debug("TLB ST fault: cause %#x, status %#x, PC: %p, BadVaddr: %#lx\n",
|
kvm_debug("TLB ST fault: cause %#x, status %#x, PC: %p, BadVaddr: %#lx\n",
|
||||||
cause, kvm_read_c0_guest_status(vcpu->arch.cop0), opc,
|
cause, kvm_read_c0_guest_status(&vcpu->arch.cop0), opc,
|
||||||
badvaddr);
|
badvaddr);
|
||||||
|
|
||||||
++vcpu->stat.tlbmiss_st_exits;
|
++vcpu->stat.tlbmiss_st_exits;
|
||||||
@@ -1322,7 +1322,7 @@ int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
|||||||
kvm_get_badinstr(opc, vcpu, &inst);
|
kvm_get_badinstr(opc, vcpu, &inst);
|
||||||
kvm_err("Exception Code: %d, not yet handled, @ PC: %p, inst: 0x%08x BadVaddr: %#lx Status: %#x\n",
|
kvm_err("Exception Code: %d, not yet handled, @ PC: %p, inst: 0x%08x BadVaddr: %#lx Status: %#x\n",
|
||||||
exccode, opc, inst, badvaddr,
|
exccode, opc, inst, badvaddr,
|
||||||
kvm_read_c0_guest_status(vcpu->arch.cop0));
|
kvm_read_c0_guest_status(&vcpu->arch.cop0));
|
||||||
kvm_arch_vcpu_dump_regs(vcpu);
|
kvm_arch_vcpu_dump_regs(vcpu);
|
||||||
run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||||
ret = RESUME_HOST;
|
ret = RESUME_HOST;
|
||||||
@@ -1384,7 +1384,7 @@ int kvm_mips_handle_exit(struct kvm_vcpu *vcpu)
|
|||||||
/* Enable FPU for guest and restore context */
|
/* Enable FPU for guest and restore context */
|
||||||
void kvm_own_fpu(struct kvm_vcpu *vcpu)
|
void kvm_own_fpu(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
unsigned int sr, cfg5;
|
unsigned int sr, cfg5;
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
@@ -1428,7 +1428,7 @@ void kvm_own_fpu(struct kvm_vcpu *vcpu)
|
|||||||
/* Enable MSA for guest and restore context */
|
/* Enable MSA for guest and restore context */
|
||||||
void kvm_own_msa(struct kvm_vcpu *vcpu)
|
void kvm_own_msa(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
unsigned int sr, cfg5;
|
unsigned int sr, cfg5;
|
||||||
|
|
||||||
preempt_disable();
|
preempt_disable();
|
||||||
|
|||||||
@@ -54,9 +54,9 @@ void kvm_mips_dump_stats(struct kvm_vcpu *vcpu)
|
|||||||
kvm_info("\nKVM VCPU[%d] COP0 Access Profile:\n", vcpu->vcpu_id);
|
kvm_info("\nKVM VCPU[%d] COP0 Access Profile:\n", vcpu->vcpu_id);
|
||||||
for (i = 0; i < N_MIPS_COPROC_REGS; i++) {
|
for (i = 0; i < N_MIPS_COPROC_REGS; i++) {
|
||||||
for (j = 0; j < N_MIPS_COPROC_SEL; j++) {
|
for (j = 0; j < N_MIPS_COPROC_SEL; j++) {
|
||||||
if (vcpu->arch.cop0->stat[i][j])
|
if (vcpu->arch.cop0.stat[i][j])
|
||||||
kvm_info("%s[%d]: %lu\n", kvm_cop0_str[i], j,
|
kvm_info("%s[%d]: %lu\n", kvm_cop0_str[i], j,
|
||||||
vcpu->arch.cop0->stat[i][j]);
|
vcpu->arch.cop0.stat[i][j]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -322,11 +322,11 @@ TRACE_EVENT_FN(kvm_guest_mode_change,
|
|||||||
),
|
),
|
||||||
|
|
||||||
TP_fast_assign(
|
TP_fast_assign(
|
||||||
__entry->epc = kvm_read_c0_guest_epc(vcpu->arch.cop0);
|
__entry->epc = kvm_read_c0_guest_epc(&vcpu->arch.cop0);
|
||||||
__entry->pc = vcpu->arch.pc;
|
__entry->pc = vcpu->arch.pc;
|
||||||
__entry->badvaddr = kvm_read_c0_guest_badvaddr(vcpu->arch.cop0);
|
__entry->badvaddr = kvm_read_c0_guest_badvaddr(&vcpu->arch.cop0);
|
||||||
__entry->status = kvm_read_c0_guest_status(vcpu->arch.cop0);
|
__entry->status = kvm_read_c0_guest_status(&vcpu->arch.cop0);
|
||||||
__entry->cause = kvm_read_c0_guest_cause(vcpu->arch.cop0);
|
__entry->cause = kvm_read_c0_guest_cause(&vcpu->arch.cop0);
|
||||||
),
|
),
|
||||||
|
|
||||||
TP_printk("EPC: 0x%08lx PC: 0x%08lx Status: 0x%08x Cause: 0x%08x BadVAddr: 0x%08lx",
|
TP_printk("EPC: 0x%08lx PC: 0x%08lx Status: 0x%08x Cause: 0x%08x BadVAddr: 0x%08lx",
|
||||||
|
|||||||
@@ -422,7 +422,7 @@ static void _kvm_vz_restore_htimer(struct kvm_vcpu *vcpu,
|
|||||||
*/
|
*/
|
||||||
static void kvm_vz_restore_timer(struct kvm_vcpu *vcpu)
|
static void kvm_vz_restore_timer(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
u32 cause, compare;
|
u32 cause, compare;
|
||||||
|
|
||||||
compare = kvm_read_sw_gc0_compare(cop0);
|
compare = kvm_read_sw_gc0_compare(cop0);
|
||||||
@@ -517,7 +517,7 @@ static void _kvm_vz_save_htimer(struct kvm_vcpu *vcpu,
|
|||||||
*/
|
*/
|
||||||
static void kvm_vz_save_timer(struct kvm_vcpu *vcpu)
|
static void kvm_vz_save_timer(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
u32 gctl0, compare, cause;
|
u32 gctl0, compare, cause;
|
||||||
|
|
||||||
gctl0 = read_c0_guestctl0();
|
gctl0 = read_c0_guestctl0();
|
||||||
@@ -863,7 +863,7 @@ static unsigned long mips_process_maar(unsigned int op, unsigned long val)
|
|||||||
|
|
||||||
static void kvm_write_maari(struct kvm_vcpu *vcpu, unsigned long val)
|
static void kvm_write_maari(struct kvm_vcpu *vcpu, unsigned long val)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
|
|
||||||
val &= MIPS_MAARI_INDEX;
|
val &= MIPS_MAARI_INDEX;
|
||||||
if (val == MIPS_MAARI_INDEX)
|
if (val == MIPS_MAARI_INDEX)
|
||||||
@@ -876,7 +876,7 @@ static enum emulation_result kvm_vz_gpsi_cop0(union mips_instruction inst,
|
|||||||
u32 *opc, u32 cause,
|
u32 *opc, u32 cause,
|
||||||
struct kvm_vcpu *vcpu)
|
struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
enum emulation_result er = EMULATE_DONE;
|
enum emulation_result er = EMULATE_DONE;
|
||||||
u32 rt, rd, sel;
|
u32 rt, rd, sel;
|
||||||
unsigned long curr_pc;
|
unsigned long curr_pc;
|
||||||
@@ -1905,7 +1905,7 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu,
|
|||||||
const struct kvm_one_reg *reg,
|
const struct kvm_one_reg *reg,
|
||||||
s64 *v)
|
s64 *v)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
|
|
||||||
switch (reg->id) {
|
switch (reg->id) {
|
||||||
@@ -2075,7 +2075,7 @@ static int kvm_vz_get_one_reg(struct kvm_vcpu *vcpu,
|
|||||||
case KVM_REG_MIPS_CP0_MAARI:
|
case KVM_REG_MIPS_CP0_MAARI:
|
||||||
if (!cpu_guest_has_maar || cpu_guest_has_dyn_maar)
|
if (!cpu_guest_has_maar || cpu_guest_has_dyn_maar)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
*v = kvm_read_sw_gc0_maari(vcpu->arch.cop0);
|
*v = kvm_read_sw_gc0_maari(&vcpu->arch.cop0);
|
||||||
break;
|
break;
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
case KVM_REG_MIPS_CP0_XCONTEXT:
|
case KVM_REG_MIPS_CP0_XCONTEXT:
|
||||||
@@ -2129,7 +2129,7 @@ static int kvm_vz_set_one_reg(struct kvm_vcpu *vcpu,
|
|||||||
const struct kvm_one_reg *reg,
|
const struct kvm_one_reg *reg,
|
||||||
s64 v)
|
s64 v)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
unsigned int idx;
|
unsigned int idx;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned int cur, change;
|
unsigned int cur, change;
|
||||||
@@ -2556,7 +2556,7 @@ static void kvm_vz_vcpu_load_tlb(struct kvm_vcpu *vcpu, int cpu)
|
|||||||
|
|
||||||
static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
bool migrated, all;
|
bool migrated, all;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -2698,7 +2698,7 @@ static int kvm_vz_vcpu_load(struct kvm_vcpu *vcpu, int cpu)
|
|||||||
|
|
||||||
static int kvm_vz_vcpu_put(struct kvm_vcpu *vcpu, int cpu)
|
static int kvm_vz_vcpu_put(struct kvm_vcpu *vcpu, int cpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
|
|
||||||
if (current->flags & PF_VCPU)
|
if (current->flags & PF_VCPU)
|
||||||
kvm_vz_vcpu_save_wired(vcpu);
|
kvm_vz_vcpu_save_wired(vcpu);
|
||||||
@@ -3070,7 +3070,7 @@ static void kvm_vz_vcpu_uninit(struct kvm_vcpu *vcpu)
|
|||||||
|
|
||||||
static int kvm_vz_vcpu_setup(struct kvm_vcpu *vcpu)
|
static int kvm_vz_vcpu_setup(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
struct mips_coproc *cop0 = &vcpu->arch.cop0;
|
||||||
unsigned long count_hz = 100*1000*1000; /* default to 100 MHz */
|
unsigned long count_hz = 100*1000*1000; /* default to 100 MHz */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -72,10 +72,6 @@
|
|||||||
|
|
||||||
#include <asm/asmregs.h>
|
#include <asm/asmregs.h>
|
||||||
|
|
||||||
sp = 30
|
|
||||||
gp = 27
|
|
||||||
ipsw = 22
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We provide two versions of each macro to convert from physical
|
* We provide two versions of each macro to convert from physical
|
||||||
* to virtual and vice versa. The "_r1" versions take one argument
|
* to virtual and vice versa. The "_r1" versions take one argument
|
||||||
|
|||||||
@@ -240,7 +240,7 @@ config PPC_EARLY_DEBUG_40x
|
|||||||
|
|
||||||
config PPC_EARLY_DEBUG_CPM
|
config PPC_EARLY_DEBUG_CPM
|
||||||
bool "Early serial debugging for Freescale CPM-based serial ports"
|
bool "Early serial debugging for Freescale CPM-based serial ports"
|
||||||
depends on SERIAL_CPM
|
depends on SERIAL_CPM=y
|
||||||
help
|
help
|
||||||
Select this to enable early debugging for Freescale chips
|
Select this to enable early debugging for Freescale chips
|
||||||
using a CPM-based serial port. This assumes that the bootwrapper
|
using a CPM-based serial port. This assumes that the bootwrapper
|
||||||
|
|||||||
@@ -444,3 +444,11 @@ checkbin:
|
|||||||
echo -n '*** Please use a different binutils version.' ; \
|
echo -n '*** Please use a different binutils version.' ; \
|
||||||
false ; \
|
false ; \
|
||||||
fi
|
fi
|
||||||
|
@if test "x${CONFIG_FTRACE_MCOUNT_USE_RECORDMCOUNT}" = "xy" -a \
|
||||||
|
"x${CONFIG_LD_IS_BFD}" = "xy" -a \
|
||||||
|
"${CONFIG_LD_VERSION}" = "23700" ; then \
|
||||||
|
echo -n '*** binutils 2.37 drops unused section symbols, which recordmcount ' ; \
|
||||||
|
echo 'is unable to handle.' ; \
|
||||||
|
echo '*** Please use a different binutils version.' ; \
|
||||||
|
false ; \
|
||||||
|
fi
|
||||||
|
|||||||
@@ -531,7 +531,6 @@ void preempt_schedule_irq(void);
|
|||||||
|
|
||||||
notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)
|
notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
|
||||||
unsigned long ret = 0;
|
unsigned long ret = 0;
|
||||||
unsigned long kuap;
|
unsigned long kuap;
|
||||||
bool stack_store = current_thread_info()->flags &
|
bool stack_store = current_thread_info()->flags &
|
||||||
@@ -548,7 +547,7 @@ notrace unsigned long interrupt_exit_kernel_prepare(struct pt_regs *regs)
|
|||||||
|
|
||||||
kuap = kuap_get_and_assert_locked();
|
kuap = kuap_get_and_assert_locked();
|
||||||
|
|
||||||
local_irq_save(flags);
|
local_irq_disable();
|
||||||
|
|
||||||
if (!arch_irq_disabled_regs(regs)) {
|
if (!arch_irq_disabled_regs(regs)) {
|
||||||
/* Returning to a kernel context with local irqs enabled. */
|
/* Returning to a kernel context with local irqs enabled. */
|
||||||
|
|||||||
@@ -21,60 +21,33 @@
|
|||||||
* different ABIs, though).
|
* different ABIs, though).
|
||||||
*/
|
*/
|
||||||
_GLOBAL(ppc_save_regs)
|
_GLOBAL(ppc_save_regs)
|
||||||
PPC_STL r0,0*SZL(r3)
|
/* This allows stack frame accessor macros and offsets to be used */
|
||||||
|
subi r3,r3,STACK_FRAME_OVERHEAD
|
||||||
|
PPC_STL r0,GPR0(r3)
|
||||||
#ifdef CONFIG_PPC32
|
#ifdef CONFIG_PPC32
|
||||||
stmw r2, 2*SZL(r3)
|
stmw r2,GPR2(r3)
|
||||||
#else
|
#else
|
||||||
PPC_STL r2,2*SZL(r3)
|
SAVE_GPRS(2, 31, r3)
|
||||||
PPC_STL r3,3*SZL(r3)
|
|
||||||
PPC_STL r4,4*SZL(r3)
|
|
||||||
PPC_STL r5,5*SZL(r3)
|
|
||||||
PPC_STL r6,6*SZL(r3)
|
|
||||||
PPC_STL r7,7*SZL(r3)
|
|
||||||
PPC_STL r8,8*SZL(r3)
|
|
||||||
PPC_STL r9,9*SZL(r3)
|
|
||||||
PPC_STL r10,10*SZL(r3)
|
|
||||||
PPC_STL r11,11*SZL(r3)
|
|
||||||
PPC_STL r12,12*SZL(r3)
|
|
||||||
PPC_STL r13,13*SZL(r3)
|
|
||||||
PPC_STL r14,14*SZL(r3)
|
|
||||||
PPC_STL r15,15*SZL(r3)
|
|
||||||
PPC_STL r16,16*SZL(r3)
|
|
||||||
PPC_STL r17,17*SZL(r3)
|
|
||||||
PPC_STL r18,18*SZL(r3)
|
|
||||||
PPC_STL r19,19*SZL(r3)
|
|
||||||
PPC_STL r20,20*SZL(r3)
|
|
||||||
PPC_STL r21,21*SZL(r3)
|
|
||||||
PPC_STL r22,22*SZL(r3)
|
|
||||||
PPC_STL r23,23*SZL(r3)
|
|
||||||
PPC_STL r24,24*SZL(r3)
|
|
||||||
PPC_STL r25,25*SZL(r3)
|
|
||||||
PPC_STL r26,26*SZL(r3)
|
|
||||||
PPC_STL r27,27*SZL(r3)
|
|
||||||
PPC_STL r28,28*SZL(r3)
|
|
||||||
PPC_STL r29,29*SZL(r3)
|
|
||||||
PPC_STL r30,30*SZL(r3)
|
|
||||||
PPC_STL r31,31*SZL(r3)
|
|
||||||
lbz r0,PACAIRQSOFTMASK(r13)
|
lbz r0,PACAIRQSOFTMASK(r13)
|
||||||
PPC_STL r0,SOFTE-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,SOFTE(r3)
|
||||||
#endif
|
#endif
|
||||||
/* go up one stack frame for SP */
|
/* store current SP */
|
||||||
PPC_LL r4,0(r1)
|
PPC_STL r1,GPR1(r3)
|
||||||
PPC_STL r4,1*SZL(r3)
|
|
||||||
/* get caller's LR */
|
/* get caller's LR */
|
||||||
|
PPC_LL r4,0(r1)
|
||||||
PPC_LL r0,LRSAVE(r4)
|
PPC_LL r0,LRSAVE(r4)
|
||||||
PPC_STL r0,_LINK-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_LINK(r3)
|
||||||
mflr r0
|
mflr r0
|
||||||
PPC_STL r0,_NIP-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_NIP(r3)
|
||||||
mfmsr r0
|
mfmsr r0
|
||||||
PPC_STL r0,_MSR-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_MSR(r3)
|
||||||
mfctr r0
|
mfctr r0
|
||||||
PPC_STL r0,_CTR-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_CTR(r3)
|
||||||
mfxer r0
|
mfxer r0
|
||||||
PPC_STL r0,_XER-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_XER(r3)
|
||||||
mfcr r0
|
mfcr r0
|
||||||
PPC_STL r0,_CCR-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_CCR(r3)
|
||||||
li r0,0
|
li r0,0
|
||||||
PPC_STL r0,_TRAP-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,_TRAP(r3)
|
||||||
PPC_STL r0,ORIG_GPR3-STACK_FRAME_OVERHEAD(r3)
|
PPC_STL r0,ORIG_GPR3(r3)
|
||||||
blr
|
blr
|
||||||
|
|||||||
@@ -363,26 +363,27 @@ ssize_t cpu_show_spec_store_bypass(struct device *dev, struct device_attribute *
|
|||||||
|
|
||||||
static int ssb_prctl_get(struct task_struct *task)
|
static int ssb_prctl_get(struct task_struct *task)
|
||||||
{
|
{
|
||||||
if (stf_enabled_flush_types == STF_BARRIER_NONE)
|
/*
|
||||||
/*
|
* The STF_BARRIER feature is on by default, so if it's off that means
|
||||||
* We don't have an explicit signal from firmware that we're
|
* firmware has explicitly said the CPU is not vulnerable via either
|
||||||
* vulnerable or not, we only have certain CPU revisions that
|
* the hypercall or device tree.
|
||||||
* are known to be vulnerable.
|
*/
|
||||||
*
|
if (!security_ftr_enabled(SEC_FTR_STF_BARRIER))
|
||||||
* We assume that if we're on another CPU, where the barrier is
|
|
||||||
* NONE, then we are not vulnerable.
|
|
||||||
*/
|
|
||||||
return PR_SPEC_NOT_AFFECTED;
|
return PR_SPEC_NOT_AFFECTED;
|
||||||
else
|
|
||||||
/*
|
|
||||||
* If we do have a barrier type then we are vulnerable. The
|
|
||||||
* barrier is not a global or per-process mitigation, so the
|
|
||||||
* only value we can report here is PR_SPEC_ENABLE, which
|
|
||||||
* appears as "vulnerable" in /proc.
|
|
||||||
*/
|
|
||||||
return PR_SPEC_ENABLE;
|
|
||||||
|
|
||||||
return -EINVAL;
|
/*
|
||||||
|
* If the system's CPU has no known barrier (see setup_stf_barrier())
|
||||||
|
* then assume that the CPU is not vulnerable.
|
||||||
|
*/
|
||||||
|
if (stf_enabled_flush_types == STF_BARRIER_NONE)
|
||||||
|
return PR_SPEC_NOT_AFFECTED;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Otherwise the CPU is vulnerable. The barrier is not a global or
|
||||||
|
* per-process mitigation, so the only value that can be reported here
|
||||||
|
* is PR_SPEC_ENABLE, which appears as "vulnerable" in /proc.
|
||||||
|
*/
|
||||||
|
return PR_SPEC_ENABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int arch_prctl_spec_ctrl_get(struct task_struct *task, unsigned long which)
|
int arch_prctl_spec_ctrl_get(struct task_struct *task, unsigned long which)
|
||||||
|
|||||||
@@ -258,8 +258,9 @@ static void prepare_save_user_regs(int ctx_has_vsx_region)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __unsafe_save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
static __always_inline int
|
||||||
struct mcontext __user *tm_frame, int ctx_has_vsx_region)
|
__unsafe_save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
|
||||||
|
struct mcontext __user *tm_frame, int ctx_has_vsx_region)
|
||||||
{
|
{
|
||||||
unsigned long msr = regs->msr;
|
unsigned long msr = regs->msr;
|
||||||
|
|
||||||
@@ -358,8 +359,9 @@ static void prepare_save_tm_user_regs(void)
|
|||||||
current->thread.ckvrsave = mfspr(SPRN_VRSAVE);
|
current->thread.ckvrsave = mfspr(SPRN_VRSAVE);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame,
|
static __always_inline int
|
||||||
struct mcontext __user *tm_frame, unsigned long msr)
|
save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame,
|
||||||
|
struct mcontext __user *tm_frame, unsigned long msr)
|
||||||
{
|
{
|
||||||
/* Save both sets of general registers */
|
/* Save both sets of general registers */
|
||||||
unsafe_save_general_regs(¤t->thread.ckpt_regs, frame, failed);
|
unsafe_save_general_regs(¤t->thread.ckpt_regs, frame, failed);
|
||||||
@@ -438,8 +440,9 @@ failed:
|
|||||||
#else
|
#else
|
||||||
static void prepare_save_tm_user_regs(void) { }
|
static void prepare_save_tm_user_regs(void) { }
|
||||||
|
|
||||||
static int save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame,
|
static __always_inline int
|
||||||
struct mcontext __user *tm_frame, unsigned long msr)
|
save_tm_user_regs_unsafe(struct pt_regs *regs, struct mcontext __user *frame,
|
||||||
|
struct mcontext __user *tm_frame, unsigned long msr)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -764,9 +764,9 @@ static void free_pud_table(pud_t *pud_start, p4d_t *p4d)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void remove_pte_table(pte_t *pte_start, unsigned long addr,
|
static void remove_pte_table(pte_t *pte_start, unsigned long addr,
|
||||||
unsigned long end)
|
unsigned long end, bool direct)
|
||||||
{
|
{
|
||||||
unsigned long next;
|
unsigned long next, pages = 0;
|
||||||
pte_t *pte;
|
pte_t *pte;
|
||||||
|
|
||||||
pte = pte_start + pte_index(addr);
|
pte = pte_start + pte_index(addr);
|
||||||
@@ -788,13 +788,16 @@ static void remove_pte_table(pte_t *pte_start, unsigned long addr,
|
|||||||
}
|
}
|
||||||
|
|
||||||
pte_clear(&init_mm, addr, pte);
|
pte_clear(&init_mm, addr, pte);
|
||||||
|
pages++;
|
||||||
}
|
}
|
||||||
|
if (direct)
|
||||||
|
update_page_count(mmu_virtual_psize, -pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
|
static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
|
||||||
unsigned long end)
|
unsigned long end, bool direct)
|
||||||
{
|
{
|
||||||
unsigned long next;
|
unsigned long next, pages = 0;
|
||||||
pte_t *pte_base;
|
pte_t *pte_base;
|
||||||
pmd_t *pmd;
|
pmd_t *pmd;
|
||||||
|
|
||||||
@@ -812,19 +815,22 @@ static void __meminit remove_pmd_table(pmd_t *pmd_start, unsigned long addr,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
pte_clear(&init_mm, addr, (pte_t *)pmd);
|
pte_clear(&init_mm, addr, (pte_t *)pmd);
|
||||||
|
pages++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pte_base = (pte_t *)pmd_page_vaddr(*pmd);
|
pte_base = (pte_t *)pmd_page_vaddr(*pmd);
|
||||||
remove_pte_table(pte_base, addr, next);
|
remove_pte_table(pte_base, addr, next, direct);
|
||||||
free_pte_table(pte_base, pmd);
|
free_pte_table(pte_base, pmd);
|
||||||
}
|
}
|
||||||
|
if (direct)
|
||||||
|
update_page_count(MMU_PAGE_2M, -pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr,
|
static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr,
|
||||||
unsigned long end)
|
unsigned long end, bool direct)
|
||||||
{
|
{
|
||||||
unsigned long next;
|
unsigned long next, pages = 0;
|
||||||
pmd_t *pmd_base;
|
pmd_t *pmd_base;
|
||||||
pud_t *pud;
|
pud_t *pud;
|
||||||
|
|
||||||
@@ -842,16 +848,20 @@ static void __meminit remove_pud_table(pud_t *pud_start, unsigned long addr,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
pte_clear(&init_mm, addr, (pte_t *)pud);
|
pte_clear(&init_mm, addr, (pte_t *)pud);
|
||||||
|
pages++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
pmd_base = pud_pgtable(*pud);
|
pmd_base = pud_pgtable(*pud);
|
||||||
remove_pmd_table(pmd_base, addr, next);
|
remove_pmd_table(pmd_base, addr, next, direct);
|
||||||
free_pmd_table(pmd_base, pud);
|
free_pmd_table(pmd_base, pud);
|
||||||
}
|
}
|
||||||
|
if (direct)
|
||||||
|
update_page_count(MMU_PAGE_1G, -pages);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __meminit remove_pagetable(unsigned long start, unsigned long end)
|
static void __meminit remove_pagetable(unsigned long start, unsigned long end,
|
||||||
|
bool direct)
|
||||||
{
|
{
|
||||||
unsigned long addr, next;
|
unsigned long addr, next;
|
||||||
pud_t *pud_base;
|
pud_t *pud_base;
|
||||||
@@ -880,7 +890,7 @@ static void __meminit remove_pagetable(unsigned long start, unsigned long end)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pud_base = p4d_pgtable(*p4d);
|
pud_base = p4d_pgtable(*p4d);
|
||||||
remove_pud_table(pud_base, addr, next);
|
remove_pud_table(pud_base, addr, next, direct);
|
||||||
free_pud_table(pud_base, p4d);
|
free_pud_table(pud_base, p4d);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -903,7 +913,7 @@ int __meminit radix__create_section_mapping(unsigned long start,
|
|||||||
|
|
||||||
int __meminit radix__remove_section_mapping(unsigned long start, unsigned long end)
|
int __meminit radix__remove_section_mapping(unsigned long start, unsigned long end)
|
||||||
{
|
{
|
||||||
remove_pagetable(start, end);
|
remove_pagetable(start, end, true);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CONFIG_MEMORY_HOTPLUG */
|
#endif /* CONFIG_MEMORY_HOTPLUG */
|
||||||
@@ -939,7 +949,7 @@ int __meminit radix__vmemmap_create_mapping(unsigned long start,
|
|||||||
#ifdef CONFIG_MEMORY_HOTPLUG
|
#ifdef CONFIG_MEMORY_HOTPLUG
|
||||||
void __meminit radix__vmemmap_remove_mapping(unsigned long start, unsigned long page_size)
|
void __meminit radix__vmemmap_remove_mapping(unsigned long start, unsigned long page_size)
|
||||||
{
|
{
|
||||||
remove_pagetable(start, start + page_size);
|
remove_pagetable(start, start + page_size, false);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -188,7 +188,7 @@ static bool altmap_cross_boundary(struct vmem_altmap *altmap, unsigned long star
|
|||||||
unsigned long nr_pfn = page_size / sizeof(struct page);
|
unsigned long nr_pfn = page_size / sizeof(struct page);
|
||||||
unsigned long start_pfn = page_to_pfn((struct page *)start);
|
unsigned long start_pfn = page_to_pfn((struct page *)start);
|
||||||
|
|
||||||
if ((start_pfn + nr_pfn) > altmap->end_pfn)
|
if ((start_pfn + nr_pfn - 1) > altmap->end_pfn)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (start_pfn < altmap->base_pfn)
|
if (start_pfn < altmap->base_pfn)
|
||||||
|
|||||||
@@ -600,12 +600,12 @@ static void pnv_pci_sriov_disable(struct pci_dev *pdev)
|
|||||||
struct pnv_iov_data *iov;
|
struct pnv_iov_data *iov;
|
||||||
|
|
||||||
iov = pnv_iov_get(pdev);
|
iov = pnv_iov_get(pdev);
|
||||||
num_vfs = iov->num_vfs;
|
|
||||||
base_pe = iov->vf_pe_arr[0].pe_number;
|
|
||||||
|
|
||||||
if (WARN_ON(!iov))
|
if (WARN_ON(!iov))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
num_vfs = iov->num_vfs;
|
||||||
|
base_pe = iov->vf_pe_arr[0].pe_number;
|
||||||
|
|
||||||
/* Release VF PEs */
|
/* Release VF PEs */
|
||||||
pnv_ioda_release_vf_PE(pdev);
|
pnv_ioda_release_vf_PE(pdev);
|
||||||
|
|
||||||
|
|||||||
@@ -1310,8 +1310,8 @@ int vas_win_close(struct vas_window *vwin)
|
|||||||
/* if send window, drop reference to matching receive window */
|
/* if send window, drop reference to matching receive window */
|
||||||
if (window->tx_win) {
|
if (window->tx_win) {
|
||||||
if (window->user_win) {
|
if (window->user_win) {
|
||||||
put_vas_user_win_ref(&vwin->task_ref);
|
|
||||||
mm_context_remove_vas_window(vwin->task_ref.mm);
|
mm_context_remove_vas_window(vwin->task_ref.mm);
|
||||||
|
put_vas_user_win_ref(&vwin->task_ref);
|
||||||
}
|
}
|
||||||
put_rx_win(window->rxwin);
|
put_rx_win(window->rxwin);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -441,8 +441,8 @@ static int vas_deallocate_window(struct vas_window *vwin)
|
|||||||
atomic_dec(&caps->used_lpar_creds);
|
atomic_dec(&caps->used_lpar_creds);
|
||||||
mutex_unlock(&vas_pseries_mutex);
|
mutex_unlock(&vas_pseries_mutex);
|
||||||
|
|
||||||
put_vas_user_win_ref(&vwin->task_ref);
|
|
||||||
mm_context_remove_vas_window(vwin->task_ref.mm);
|
mm_context_remove_vas_window(vwin->task_ref.mm);
|
||||||
|
put_vas_user_win_ref(&vwin->task_ref);
|
||||||
|
|
||||||
kfree(win);
|
kfree(win);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
|
|||||||
struct uprobe_task *utask = current->utask;
|
struct uprobe_task *utask = current->utask;
|
||||||
|
|
||||||
WARN_ON_ONCE(current->thread.bad_cause != UPROBE_TRAP_NR);
|
WARN_ON_ONCE(current->thread.bad_cause != UPROBE_TRAP_NR);
|
||||||
|
current->thread.bad_cause = utask->autask.saved_cause;
|
||||||
|
|
||||||
instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size);
|
instruction_pointer_set(regs, utask->vaddr + auprobe->insn_size);
|
||||||
|
|
||||||
@@ -102,6 +103,7 @@ void arch_uprobe_abort_xol(struct arch_uprobe *auprobe, struct pt_regs *regs)
|
|||||||
{
|
{
|
||||||
struct uprobe_task *utask = current->utask;
|
struct uprobe_task *utask = current->utask;
|
||||||
|
|
||||||
|
current->thread.bad_cause = utask->autask.saved_cause;
|
||||||
/*
|
/*
|
||||||
* Task has received a fatal signal, so reset back to probbed
|
* Task has received a fatal signal, so reset back to probbed
|
||||||
* address.
|
* address.
|
||||||
|
|||||||
@@ -235,7 +235,6 @@ static void __init setup_bootmem(void)
|
|||||||
dma_contiguous_reserve(dma32_phys_limit);
|
dma_contiguous_reserve(dma32_phys_limit);
|
||||||
if (IS_ENABLED(CONFIG_64BIT))
|
if (IS_ENABLED(CONFIG_64BIT))
|
||||||
hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
|
hugetlb_cma_reserve(PUD_SHIFT - PAGE_SHIFT);
|
||||||
memblock_allow_resize();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MMU
|
#ifdef CONFIG_MMU
|
||||||
@@ -844,7 +843,7 @@ static void __init reserve_crashkernel(void)
|
|||||||
*/
|
*/
|
||||||
crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
|
crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
|
||||||
search_start,
|
search_start,
|
||||||
min(search_end, (unsigned long) SZ_4G));
|
min(search_end, (unsigned long)(SZ_4G - 1)));
|
||||||
if (crash_base == 0) {
|
if (crash_base == 0) {
|
||||||
/* Try again without restricting region to 32bit addressible memory */
|
/* Try again without restricting region to 32bit addressible memory */
|
||||||
crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
|
crash_base = memblock_phys_alloc_range(crash_size, PMD_SIZE,
|
||||||
@@ -868,6 +867,9 @@ void __init paging_init(void)
|
|||||||
{
|
{
|
||||||
setup_bootmem();
|
setup_bootmem();
|
||||||
setup_vm_final();
|
setup_vm_final();
|
||||||
|
|
||||||
|
/* Depend on that Linear Mapping is ready */
|
||||||
|
memblock_allow_resize();
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init misc_mem_init(void)
|
void __init misc_mem_init(void)
|
||||||
|
|||||||
@@ -69,6 +69,7 @@ struct rv_jit_context {
|
|||||||
struct bpf_prog *prog;
|
struct bpf_prog *prog;
|
||||||
u16 *insns; /* RV insns */
|
u16 *insns; /* RV insns */
|
||||||
int ninsns;
|
int ninsns;
|
||||||
|
int prologue_len;
|
||||||
int epilogue_offset;
|
int epilogue_offset;
|
||||||
int *offset; /* BPF to RV */
|
int *offset; /* BPF to RV */
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
@@ -214,8 +215,8 @@ static inline int rv_offset(int insn, int off, struct rv_jit_context *ctx)
|
|||||||
int from, to;
|
int from, to;
|
||||||
|
|
||||||
off++; /* BPF branch is from PC+1, RV is from PC */
|
off++; /* BPF branch is from PC+1, RV is from PC */
|
||||||
from = (insn > 0) ? ctx->offset[insn - 1] : 0;
|
from = (insn > 0) ? ctx->offset[insn - 1] : ctx->prologue_len;
|
||||||
to = (insn + off > 0) ? ctx->offset[insn + off - 1] : 0;
|
to = (insn + off > 0) ? ctx->offset[insn + off - 1] : ctx->prologue_len;
|
||||||
return ninsns_rvoff(to - from);
|
return ninsns_rvoff(to - from);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,12 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
|
|||||||
prog = orig_prog;
|
prog = orig_prog;
|
||||||
goto out_offset;
|
goto out_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (build_body(ctx, extra_pass, NULL)) {
|
||||||
|
prog = orig_prog;
|
||||||
|
goto out_offset;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < prog->len; i++) {
|
for (i = 0; i < prog->len; i++) {
|
||||||
prev_ninsns += 32;
|
prev_ninsns += 32;
|
||||||
ctx->offset[i] = prev_ninsns;
|
ctx->offset[i] = prev_ninsns;
|
||||||
@@ -91,11 +97,15 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)
|
|||||||
for (i = 0; i < NR_JIT_ITERATIONS; i++) {
|
for (i = 0; i < NR_JIT_ITERATIONS; i++) {
|
||||||
pass++;
|
pass++;
|
||||||
ctx->ninsns = 0;
|
ctx->ninsns = 0;
|
||||||
|
|
||||||
|
bpf_jit_build_prologue(ctx);
|
||||||
|
ctx->prologue_len = ctx->ninsns;
|
||||||
|
|
||||||
if (build_body(ctx, extra_pass, ctx->offset)) {
|
if (build_body(ctx, extra_pass, ctx->offset)) {
|
||||||
prog = orig_prog;
|
prog = orig_prog;
|
||||||
goto out_offset;
|
goto out_offset;
|
||||||
}
|
}
|
||||||
bpf_jit_build_prologue(ctx);
|
|
||||||
ctx->epilogue_offset = ctx->ninsns;
|
ctx->epilogue_offset = ctx->ninsns;
|
||||||
bpf_jit_build_epilogue(ctx);
|
bpf_jit_build_epilogue(ctx);
|
||||||
|
|
||||||
@@ -154,6 +164,9 @@ skip_init_ctx:
|
|||||||
|
|
||||||
if (!prog->is_func || extra_pass) {
|
if (!prog->is_func || extra_pass) {
|
||||||
bpf_jit_binary_lock_ro(jit_data->header);
|
bpf_jit_binary_lock_ro(jit_data->header);
|
||||||
|
for (i = 0; i < prog->len; i++)
|
||||||
|
ctx->offset[i] = ninsns_rvoff(ctx->offset[i]);
|
||||||
|
bpf_prog_fill_jited_linfo(prog, ctx->offset);
|
||||||
out_offset:
|
out_offset:
|
||||||
kfree(ctx->offset);
|
kfree(ctx->offset);
|
||||||
kfree(jit_data);
|
kfree(jit_data);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ KBUILD_CFLAGS_DECOMPRESSOR += -fno-delete-null-pointer-checks -msoft-float -mbac
|
|||||||
KBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
|
KBUILD_CFLAGS_DECOMPRESSOR += -fno-asynchronous-unwind-tables
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
|
KBUILD_CFLAGS_DECOMPRESSOR += -ffreestanding
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
|
KBUILD_CFLAGS_DECOMPRESSOR += -fno-stack-protector
|
||||||
|
KBUILD_CFLAGS_DECOMPRESSOR += -fPIE
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
|
KBUILD_CFLAGS_DECOMPRESSOR += $(call cc-disable-warning, address-of-packed-member)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO),-g)
|
||||||
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
KBUILD_CFLAGS_DECOMPRESSOR += $(if $(CONFIG_DEBUG_INFO_DWARF4), $(call cc-option, -gdwarf-4,))
|
||||||
|
|||||||
@@ -166,6 +166,7 @@ static int diag9c_forwarding_overrun(void)
|
|||||||
static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
||||||
{
|
{
|
||||||
struct kvm_vcpu *tcpu;
|
struct kvm_vcpu *tcpu;
|
||||||
|
int tcpu_cpu;
|
||||||
int tid;
|
int tid;
|
||||||
|
|
||||||
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
tid = vcpu->run->s.regs.gprs[(vcpu->arch.sie_block->ipa & 0xf0) >> 4];
|
||||||
@@ -181,14 +182,15 @@ static int __diag_time_slice_end_directed(struct kvm_vcpu *vcpu)
|
|||||||
goto no_yield;
|
goto no_yield;
|
||||||
|
|
||||||
/* target guest VCPU already running */
|
/* target guest VCPU already running */
|
||||||
if (READ_ONCE(tcpu->cpu) >= 0) {
|
tcpu_cpu = READ_ONCE(tcpu->cpu);
|
||||||
|
if (tcpu_cpu >= 0) {
|
||||||
if (!diag9c_forwarding_hz || diag9c_forwarding_overrun())
|
if (!diag9c_forwarding_hz || diag9c_forwarding_overrun())
|
||||||
goto no_yield;
|
goto no_yield;
|
||||||
|
|
||||||
/* target host CPU already running */
|
/* target host CPU already running */
|
||||||
if (!vcpu_is_preempted(tcpu->cpu))
|
if (!vcpu_is_preempted(tcpu_cpu))
|
||||||
goto no_yield;
|
goto no_yield;
|
||||||
smp_yield_cpu(tcpu->cpu);
|
smp_yield_cpu(tcpu_cpu);
|
||||||
VCPU_EVENT(vcpu, 5,
|
VCPU_EVENT(vcpu, 5,
|
||||||
"diag time slice end directed to %d: yield forwarded",
|
"diag time slice end directed to %d: yield forwarded",
|
||||||
tid);
|
tid);
|
||||||
|
|||||||
@@ -2030,6 +2030,10 @@ static unsigned long kvm_s390_next_dirty_cmma(struct kvm_memslots *slots,
|
|||||||
ms = slots->memslots + slotidx;
|
ms = slots->memslots + slotidx;
|
||||||
ofs = 0;
|
ofs = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (cur_gfn < ms->base_gfn)
|
||||||
|
ofs = 0;
|
||||||
|
|
||||||
ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, ofs);
|
ofs = find_next_bit(kvm_second_dirty_bitmap(ms), ms->npages, ofs);
|
||||||
while ((slotidx > 0) && (ofs >= ms->npages)) {
|
while ((slotidx > 0) && (ofs >= ms->npages)) {
|
||||||
slotidx--;
|
slotidx--;
|
||||||
|
|||||||
@@ -169,7 +169,8 @@ static int setup_apcb00(struct kvm_vcpu *vcpu, unsigned long *apcb_s,
|
|||||||
sizeof(struct kvm_s390_apcb0)))
|
sizeof(struct kvm_s390_apcb0)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
bitmap_and(apcb_s, apcb_s, apcb_h, sizeof(struct kvm_s390_apcb0));
|
bitmap_and(apcb_s, apcb_s, apcb_h,
|
||||||
|
BITS_PER_BYTE * sizeof(struct kvm_s390_apcb0));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -191,7 +192,8 @@ static int setup_apcb11(struct kvm_vcpu *vcpu, unsigned long *apcb_s,
|
|||||||
sizeof(struct kvm_s390_apcb1)))
|
sizeof(struct kvm_s390_apcb1)))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
bitmap_and(apcb_s, apcb_s, apcb_h, sizeof(struct kvm_s390_apcb1));
|
bitmap_and(apcb_s, apcb_s, apcb_h,
|
||||||
|
BITS_PER_BYTE * sizeof(struct kvm_s390_apcb1));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,18 @@
|
|||||||
#include <cpu/dma-register.h>
|
#include <cpu/dma-register.h>
|
||||||
#include <cpu/dma.h>
|
#include <cpu/dma.h>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Some of the SoCs feature two DMAC modules. In such a case, the channels are
|
||||||
|
* distributed equally among them.
|
||||||
|
*/
|
||||||
|
#ifdef SH_DMAC_BASE1
|
||||||
|
#define SH_DMAC_NR_MD_CH (CONFIG_NR_ONCHIP_DMA_CHANNELS / 2)
|
||||||
|
#else
|
||||||
|
#define SH_DMAC_NR_MD_CH CONFIG_NR_ONCHIP_DMA_CHANNELS
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define SH_DMAC_CH_SZ 0x10
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Define the default configuration for dual address memory-memory transfer.
|
* Define the default configuration for dual address memory-memory transfer.
|
||||||
* The 0x400 value represents auto-request, external->external.
|
* The 0x400 value represents auto-request, external->external.
|
||||||
@@ -29,7 +41,7 @@ static unsigned long dma_find_base(unsigned int chan)
|
|||||||
unsigned long base = SH_DMAC_BASE0;
|
unsigned long base = SH_DMAC_BASE0;
|
||||||
|
|
||||||
#ifdef SH_DMAC_BASE1
|
#ifdef SH_DMAC_BASE1
|
||||||
if (chan >= 6)
|
if (chan >= SH_DMAC_NR_MD_CH)
|
||||||
base = SH_DMAC_BASE1;
|
base = SH_DMAC_BASE1;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -40,13 +52,13 @@ static unsigned long dma_base_addr(unsigned int chan)
|
|||||||
{
|
{
|
||||||
unsigned long base = dma_find_base(chan);
|
unsigned long base = dma_find_base(chan);
|
||||||
|
|
||||||
/* Normalize offset calculation */
|
chan = (chan % SH_DMAC_NR_MD_CH) * SH_DMAC_CH_SZ;
|
||||||
if (chan >= 9)
|
|
||||||
chan -= 6;
|
|
||||||
if (chan >= 4)
|
|
||||||
base += 0x10;
|
|
||||||
|
|
||||||
return base + (chan * 0x10);
|
/* DMAOR is placed inside the channel register space. Step over it. */
|
||||||
|
if (chan >= DMAOR)
|
||||||
|
base += SH_DMAC_CH_SZ;
|
||||||
|
|
||||||
|
return base + chan;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SH_DMA_IRQ_MULTI
|
#ifdef CONFIG_SH_DMA_IRQ_MULTI
|
||||||
@@ -250,12 +262,11 @@ static int sh_dmac_get_dma_residue(struct dma_channel *chan)
|
|||||||
#define NR_DMAOR 1
|
#define NR_DMAOR 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
#define dmaor_read_reg(n) __raw_readw(dma_find_base((n) * \
|
||||||
* DMAOR bases are broken out amongst channel groups. DMAOR0 manages
|
SH_DMAC_NR_MD_CH) + DMAOR)
|
||||||
* channels 0 - 5, DMAOR1 6 - 11 (optional).
|
#define dmaor_write_reg(n, data) __raw_writew(data, \
|
||||||
*/
|
dma_find_base((n) * \
|
||||||
#define dmaor_read_reg(n) __raw_readw(dma_find_base((n)*6))
|
SH_DMAC_NR_MD_CH) + DMAOR)
|
||||||
#define dmaor_write_reg(n, data) __raw_writew(data, dma_find_base(n)*6)
|
|
||||||
|
|
||||||
static inline int dmaor_reset(int no)
|
static inline int dmaor_reset(int no)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ static int __init scan_cache(unsigned long node, const char *uname,
|
|||||||
if (!of_flat_dt_is_compatible(node, "jcore,cache"))
|
if (!of_flat_dt_is_compatible(node, "jcore,cache"))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
j2_ccr_base = (u32 __iomem *)of_flat_dt_translate_address(node);
|
j2_ccr_base = ioremap(of_flat_dt_translate_address(node), 4);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ export LDFLAGS_vmlinux := $(LDFLAGS_EXECSTACK)
|
|||||||
# When cleaning we don't include .config, so we don't include
|
# When cleaning we don't include .config, so we don't include
|
||||||
# TT or skas makefiles and don't clean skas_ptregs.h.
|
# TT or skas makefiles and don't clean skas_ptregs.h.
|
||||||
CLEAN_FILES += linux x.i gmon.out
|
CLEAN_FILES += linux x.i gmon.out
|
||||||
MRPROPER_FILES += arch/$(SUBARCH)/include/generated
|
MRPROPER_FILES += $(HOST_DIR)/include/generated
|
||||||
|
|
||||||
archclean:
|
archclean:
|
||||||
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
||||||
|
|||||||
@@ -448,6 +448,7 @@ CONFIG_HID_WIIMOTE=y
|
|||||||
CONFIG_USB_HIDDEV=y
|
CONFIG_USB_HIDDEV=y
|
||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
CONFIG_USB_XHCI_HCD=y
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_PCI_RENESAS=y
|
||||||
CONFIG_USB_EHCI_HCD=y
|
CONFIG_USB_EHCI_HCD=y
|
||||||
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
CONFIG_USB_EHCI_HCD_PLATFORM=y
|
||||||
|
|||||||
@@ -364,7 +364,7 @@ static int amd_pmu_hw_config(struct perf_event *event)
|
|||||||
|
|
||||||
/* pass precise event sampling to ibs: */
|
/* pass precise event sampling to ibs: */
|
||||||
if (event->attr.precise_ip && get_ibs_caps())
|
if (event->attr.precise_ip && get_ibs_caps())
|
||||||
return -ENOENT;
|
return forward_event_to_ibs(event);
|
||||||
|
|
||||||
if (has_branch_stack(event))
|
if (has_branch_stack(event))
|
||||||
return -EOPNOTSUPP;
|
return -EOPNOTSUPP;
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user