mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-24 19:40:21 +09:00
Merge tag 'android14-5.15.153_r00' into 'android14-5.15'
This catches the android14-5.15 branch up with the 5.15.153 LTS release. Included in here are the following commits: *8517b7fac5ANDROID: GKI: Update .stg file due to internal io_uring changes *80c0158e86ANDROID: cpufreq: brcmstb-avs-cpufreq: fix build error *6a87f57d6bRevert "bpf: Defer the free of inner map when necessary" *8c23052a2aMerge 5.15.153 into android14-5.15-lts |\ | *9465fef4aeLinux 5.15.153 | *d180150ea7remoteproc: stm32: fix incorrect optional pointers | *85e26c4a74regmap: Add missing map->bus check | *c10fed329cspi: spi-mt65xx: Fix NULL pointer access in interrupt handler | *839308cf79net: dsa: mt7530: fix handling of all link-local frames | *cb302aa994net: dsa: mt7530: fix link-local frames that ingress vlan filtering ports | *70424a8f45net: dsa: mt7530: fix handling of 802.1X PAE frames | *c210fb3c45net: dsa: mt7530: fix handling of LLDP frames | *387daae8b0bpf: report RCU QS in cpumap kthread | *2f1d402dccnet: report RCU QS on threaded NAPI repolling | *083657dc7crcu: add a helper to report consolidated flavor QS | *640dbf688bnetfilter: nf_tables: do not compare internal table flags on updates | *362508506bnetfilter: nft_set_pipapo: release elements in clone only from destroy path | *772f18ded0octeontx2-af: Use separate handlers for interrupts | *8ffcd3ccdbnet/bnx2x: Prevent access to a freed page in page_pool | *f1e560cdb1net: phy: fix phy_read_poll_timeout argument type in genphy_loopback | *5deee0f7c2hsr: Handle failures in module init | *8c378cc522rds: introduce acquire/release ordering in acquire/release_in_xmit() | *d691be84abwireguard: receive: annotate data-race around receiving_counter.counter | *2b2f8d166fvdpa/mlx5: Allow CVQ size changes | *4d61084c5cnet: dsa: mt7530: prevent possible incorrect XTAL frequency selection | *f85c87a803net: veth: do not manipulate GRO when using XDP | *d35b62c224packet: annotate data-races around ignore_outgoing | *9fcadd1250net: ethernet: mtk_eth_soc: fix PPE hanging issue | *448cc8b5f7net: mediatek: mtk_eth_soc: clear MAC_MCR_FORCE_LINK only when MAC is up | *c5c0760adcnet: mtk_eth_soc: move MAC_MCR setting to mac_finish() | *a809bbfd0ehsr: Fix uninit-value access in hsr_get_node() | *ccafa081besoc: fsl: dpio: fix kcalloc() argument order | *4b9d72498ds390/vtime: fix average steal time calculation | *8fdc7b408aocteontx2-af: Use matching wake_up API variant in CGX command interface | *aa5ab5ce34nouveau: reset the bo resource bus info after an eviction | *deb5946255io_uring: don't save/restore iowait state | *1049fa4d02usb: gadget: net2272: Use irqflags in the call to net2272_probe_fin | *463c429bddstaging: greybus: fix get_channel_from_mode() failure path | *6c619223aaserial: 8250_exar: Don't remove GPIO device on suspend | *f867ba8ea1rtc: mt6397: select IRQ_DOMAIN instead of depending on it | *04dd61330fkconfig: fix infinite loop when expanding a macro at the end of file | *3019ad4a02arm64: dts: broadcom: bcmbca: bcm4908: drop invalid switch cells | *c220378081tty: serial: samsung: fix tx_empty() to return TIOCSER_TEMT | *e6011abe0cserial: max310x: fix syntax error in IRQ error message | *19b2131837tty: vt: fix 20 vs 0x20 typo in EScsiignore | *ea34c1c1f3remoteproc: stm32: Fix incorrect type assignment returned by stm32_rproc_get_loaded_rsc_tablef | *dd68756ae3remoteproc: stm32: Fix incorrect type in assignment for va | *a48c24ccc6remoteproc: stm32: use correct format strings on 64-bit | *da0ad1bdc6comedi: comedi_test: Prevent timers rescheduling during deletion | *a6ffae61adafs: Revert "afs: Hide silly-rename files from userspace" | *fa3ac8b1a2f2fs: compress: fix reserve_cblocks counting error when out of space | *6ca2ea698dNFS: Fix an off by one in root_nfs_cat() | *704dc01387watchdog: stm32_iwdg: initialize default timeout | *446f55d0d4NFSv4.2: fix listxattr maximum XDR buffer size | *9d52865ff2NFSv4.2: fix nfs4_listxattr kernel BUG at mm/usercopy.c:102 | *6233dbe9canet: sunrpc: Fix an off by one in rpc_sockaddr2uaddr() | *83edcda1d8scsi: bfa: Fix function pointer type mismatch for hcb_qe->cbfn | *16a5bed6d2RDMA/rtrs-clt: Check strnlen return len in sysfs mpath_policy_store() | *ed3e66d86eRDMA/device: Fix a race between mad_client and cm_client init | *a27984f631scsi: csiostor: Avoid function pointer casts | *4a411fc336f2fs: compress: fix to check unreleased compressed cluster | *7d420eaaa1f2fs: compress: fix to cover normal cluster write with cp_rwsem | *ed22aef701f2fs: reduce stack memory cost by using bitfield in struct f2fs_io_info | *b2713af17af2fs: invalidate meta pages only for post_read required inode | *6117d8b79ff2fs: fix to invalidate META_MAPPING before DIO write | *5d553a56def2fs: replace congestion_wait() calls with io_schedule_timeout() | *bc7e7e7d64f2fs: invalidate META_MAPPING before IPU/DIO write | *4a543790fdf2fs: multidevice: support direct IO | *6413e78086RDMA/srpt: Do not register event handler until srpt device is fully setup | *9af1658ba2ALSA: usb-audio: Stop parsing channels bits when all channels are found. | *e9fbee0673ALSA: hda/realtek: fix ALC285 issues on HP Envy x360 laptops | *01511ac7beclk: zynq: Prevent null pointer dereference caused by kmalloc failure | *0efb9ef6fbclk: Fix clk_core_get NULL dereference | *d83d70b25dsparc32: Fix section mismatch in leon_pci_grpci | *e4723c6b3ebacklight: lp8788: Fully initialize backlight_properties during probe | *73f547f259backlight: lm3639: Fully initialize backlight_properties during probe | *d01286f991backlight: da9052: Fully initialize backlight_properties during probe | *28e37f97b1backlight: lm3630a: Don't set bl->props.brightness in get_brightness | *a80fb03ddabacklight: lm3630a: Initialize backlight_properties on init | *f28b72162fleds: sgm3140: Add missing timer cleanup and flash gpio control | *663dea0305leds: aw2013: Unlock mutex before destroying it | *d63abda6c8powerpc/embedded6xx: Fix no previous prototype for avr_uart_send() etc. | *6a3d4afc54modules: wait do_free_init correctly | *a91eef04a7module: Add support for default value for module async_probe | *6304ed1603drm/msm/dpu: add division of drm_display_mode's hskew parameter | *f4108b28dcpowerpc/hv-gpci: Fix the H_GET_PERF_COUNTER_INFO hcall return value checks | *9beec711a1drm/mediatek: Fix a null pointer crash in mtk_drm_crtc_finish_page_flip | *e5aaa9f8dbmedia: mediatek: vcodec: avoid -Wcast-function-type-strict warning | *24e51d6eb5media: ttpci: fix two memleaks in budget_av_attach | *790fa2c04dmedia: go7007: fix a memleak in go7007_load_encoder | *d20b64f156media: dvb-frontends: avoid stack overflow warnings with clang | *eb6e9dce97media: pvrusb2: fix uaf in pvr2_context_set_notify | *d8e83a625cdrm/amdgpu: Fix missing break in ATOM_ARG_IMM Case of atom_get_src_int() | *815d1f1c67HID: amd_sfh: Update HPD sensor structure elements | *8abf014e0cASoC: meson: axg-tdm-interface: add frame rate constraint | *8441012261ASoC: meson: axg-tdm-interface: fix mclk setup without mclk-fs | *e3adf12624mtd: rawnand: lpc32xx_mlc: fix irq handler prototype | *7178a27249mtd: maps: physmap-core: fix flash size larger than 32-bit | *3ae4bd815fdrm/tidss: Fix initial plane zpos values | *9cc746346dcrypto: arm/sha - fix function cast warnings | *010cf12f59mfd: altera-sysmgr: Call of_node_put() only when of_parse_phandle() takes a ref | *1d50e29578mfd: syscon: Call of_node_put() only when of_parse_phandle() takes a ref | *240c4f1159drm/tegra: put drm_gem_object ref on error in tegra_fb_create | *3f8445f1c7clk: hisilicon: hi3559a: Fix an erroneous devm_kfree() | *62d92b3507clk: hisilicon: hi3519: Release the correct number of gates in hi3519_clk_unregister() | *118a7113dbPCI: Mark 3ware-9650SE Root Port Extended Tags as broken | *7546460128drm/mediatek: dsi: Fix DSI RGB666 formats and definitions | *4e37c53422clk: qcom: dispcc-sdm845: Adjust internal GDSC wait times | *fe68cf2739media: pvrusb2: fix pvr2_stream_callback casts | *4f2a1657f9media: pvrusb2: remove redundant NULL check | *8e19050ab9media: go7007: add check of return value of go7007_read_addr() | *b1d0eebaf8media: imx: csc/scaler: fix v4l2_ctrl_handler memory leak | *f27bcdae57media: sun8i-di: Fix chroma difference threshold | *de09db4e5dmedia: sun8i-di: Fix power on/off sequences | *4bdc1b352emedia: sun8i-di: Fix coefficient writes | *a62b9f3d7bNTB: fix possible name leak in ntb_register_device() | *87d306cdebNTB: EPF: fix possible memory leak in pci_vntb_probe() | *e2b6ef72b7PCI: endpoint: Support NTB transfer between RC and EP | *caf5cf0990powerpc: Force inlining of arch_vmap_p{u/m}d_supported() | *4eb47ae93fASoC: meson: t9015: fix function pointer type mismatch | *a3fec47446ASoC: meson: aiu: fix function pointer type mismatch | *a26425b762ASoC: meson: Use dev_err_probe() helper | *3d1d029734perf stat: Avoid metric-only segv | *3cae4f4153ALSA: seq: fix function cast warnings | *7378234eeedrm/radeon/ni: Fix wrong firmware size logging in ni_init_microcode() | *abb9bea45bperf thread_map: Free strlist on normal path in thread_map__new_by_tid_str() | *03e6d4e948crypto: xilinx - call finalize with bh disabled | *ce6e3c0411PCI: switchtec: Fix an error handling path in switchtec_pci_probe() | *0bdb56eae2PCI/P2PDMA: Fix a sleeping issue in a RCU read section | *56cad01c54quota: Fix rcu annotations of inode dquot pointers | *1ca72a3de9quota: Fix potential NULL pointer dereference | *f2ddd8103fquota: simplify drop_dquot_ref() | *f630ba2386clk: qcom: reset: Ensure write completion on reset de/assertion | *e5bb4f4324clk: qcom: reset: Commonize the de/assert functions | *e8c71db0d8pinctrl: mediatek: Drop bogus slew rate register range for MT8192 | *0d3fe80b6dmedia: edia: dvbdev: fix a use-after-free | *dc866b69ccmedia: v4l2-mem2mem: fix a memleak in v4l2_m2m_register_entity | *770a57922cmedia: v4l2-tpg: fix some memleaks in tpg_alloc | *e9d05d5d84media: em28xx: annotate unchecked call to media_device_register() | *a03ed00787clk: meson: Add missing clocks to axg_clk_regmaps | *54985391deperf evsel: Fix duplicate initialization of data->id in evsel__parse_sample() | *6ac7c7a3a9drm/amd/display: Fix potential NULL pointer dereferences in 'dcn10_set_output_transfer_func()' | *440f059837drm/amd/display: Fix a potential buffer overflow in 'dp_dsc_clock_en_read()' | *d54877c835HID: lenovo: Add middleclick_workaround sysfs knob for cptkbd | *d9f8bbc6d7perf record: Fix possible incorrect free in record__switch_output() | *87658f1608PCI/DPC: Print all TLP Prefixes, not just the first | *b8505a1aeemedia: tc358743: register v4l2 async device only after successful setup | *4c309e06aadmaengine: tegra210-adma: Update dependency to ARCH_TEGRA | *746606d37ddrm/lima: fix a memleak in lima_heap_alloc | *1bb5fea94edrm/rockchip: lvds: do not print scary message when probing defer | *f3afb53618drm/rockchip: lvds: do not overwrite error code | *03b1072616drm/vmwgfx: fix a memleak in vmw_gmrid_man_get_node | *5eaa1597e2drm/ttm: add ttm_resource_fini v2 | *2fa491a1f4drm: Don't treat 0 as -1 in drm_fixp2int_ceil | *c780f00854drm/rockchip: inno_hdmi: Fix video timing | *13c1212799drm/tegra: output: Fix missing i2c_put_adapter() in the error handling paths of tegra_output_probe() | *5c8dc26e31drm/tegra: rgb: Fix missing clk_put() in the error handling paths of tegra_dc_rgb_probe() | *7ec1d3cab9drm/tegra: rgb: Fix some error handling paths in tegra_dc_rgb_probe() | *527bf2adf0drm/tegra: dc: rgb: Allow changing PLLD rate on Tegra30+ | *bfd52f7df6drm/tegra: dsi: Fix missing pm_runtime_disable() in the error handling path of tegra_dsi_probe() | *1d2f14eb47drm/tegra: dsi: Fix some error handling paths in tegra_dsi_probe() | *26827907c2drm/tegra: dsi: Make use of the helper function dev_err_probe() | *56ec754fd7drm/tegra: dpaux: Fix PM disable depth imbalance in tegra_dpaux_probe | *49ebcae0b9drm/tegra: dpaux: Populate AUX bus | *93128052bfdrm/tegra: dsi: Add missing check for of_find_device_by_node | *03ad5ad53edm: call the resume method on internal suspend | *8517729711dm raid: fix false positive for requeue needed during reshape | *0d387dc503nfp: flower: handle acti_netdevs allocation failure | *3538d11d2anet/x25: fix incorrect parameter validation in the x25_getsockopt() function | *382df231abnet: kcm: fix incorrect parameter validation in the kcm_getsockopt) function | *3a32dce1adudp: fix incorrect parameter validation in the udp_lib_getsockopt() function | *6482113f9cl2tp: fix incorrect parameter validation in the pppol2tp_getsockopt() function | *3988110ecfipmr: fix incorrect parameter validation in the ip_mroute_getsockopt() function | *71ce163f3ebpf: net: Change do_ip_getsockopt() to take the sockptr_t argument | *07aa35a50fbpf: net: Change sk_getsockopt() to take the sockptr_t argument | *25e5c9b20enet: Change sock_getsockopt() to take the sk ptr instead of the sock ptr | *4002985023tcp: fix incorrect parameter validation in the do_tcp_getsockopt() function | *c09fc67777OPP: debugfs: Fix warning around icc_get_name() | *78a60f9103net: phy: dp83822: Fix RGMII TX delay configuration | *fedd8c7d29net: phy: DP83822: enable rgmii mode if phy_interface_is_rgmii | *f82d65e8f7net: hns3: fix port duplex configure error in IMP reset | *23ec1cec24net: hns3: fix kernel crash when 1588 is received on HIP08 devices | *0e939a002cnet: phy: fix phy_get_internal_delay accessing an empty array | *5c03387021net: ip_tunnel: make sure to pull inner header in ip_tunnel_rcv() | *65fb1d271cipv6: fib6_rules: flush route cache when rule is changed | *ca1f06e72dbpf: Fix stackmap overflow check on 32-bit arches | *3b08cfc65fbpf: Fix hashtab overflow check on 32-bit arches | *c826502bedbpf: Fix DEVMAP_HASH overflow check on 32-bit arches | *276873ae26sr9800: Add check for usbnet_get_endpoints | *2e845867b4Bluetooth: hci_core: Fix possible buffer overflow | *89c69e83ffBluetooth: hci_qca: don't use IS_ERR_OR_NULL() with gpiod_get_optional() | *9609476b3aBluetooth: hci_qca: Add support for QTI Bluetooth chip wcn6855 | *88f846f352Bluetooth: Remove superfluous call to hci_conn_check_pending() | *4b5dc615f1igb: Fix missing time sync events | *5cd7afd64bigb: move PEROUT and EXTTS isr logic to separate functions | *d70f1c8511iommu/vt-d: Don't issue ATS Invalidation request when device is disconnected | *626b03daeaPCI: Make pci_dev_is_disconnected() helper public for other drivers | *4137f25b53wifi: rtw88: 8821c: Fix false alarm count | *250a78863cmmc: wmt-sdmmc: remove an incorrect release_mem_region() call in the .remove function | *dd292e884cSUNRPC: fix some memleaks in gssx_dec_option_array | *c7cff97802x86, relocs: Ignore relocations in .notes section | *40876d07d2ACPI: scan: Fix device check notification handling | *10e607fbc9ACPI: resource: Add MAIBENBEN X577 to irq1_edge_low_force_override | *cc06efd8a6ACPI: resource: Do IRQ override on Lunnen Ground laptops | *b539858261ACPI: resource: Add Infinity laptops to irq1_edge_low_force_override | *95531c0d37arm64: dts: marvell: reorder crypto interrupts on Armada SoCs | *941c6ee6f7ARM: dts: imx6dl-yapp4: Move the internal switch PHYs under the switch node | *ff54c712f0ARM: dts: imx6dl-yapp4: Fix typo in the QCA switch register address | *3ebcd8f11aARM: dts: imx6dl-yapp4: Move phy reset into switch node | *ce92a8c7cfarm64: dts: renesas: r8a779a0: Correct avb[01] reg sizes | *a022251c2farm64: dts: renesas: r8a779a0: Update to R-Car Gen4 compatible values | *3c0cc753d7ARM: dts: arm: realview: Fix development chip ROM compatible value | *276f4abe4enet: ena: Remove ena_select_queue | *90613c76f7wifi: brcmsmac: avoid function pointer casts | *b96bc1b259iommu/amd: Mark interrupt as managed | *6a87552d0abus: tegra-aconnect: Update dependency to ARCH_TEGRA | *1cbaf4c793ACPI: processor_idle: Fix memory leak in acpi_processor_power_exit() | *fe20e3d56bwifi: wilc1000: prevent use-after-free on vif when cleaning up all interfaces | *0454915c83wireless: Remove redundant 'flush_workqueue()' calls | *487eff913ebpf: Mark bpf_spin_{lock,unlock}() helpers with notrace correctly | *fcd58c69a3arm64: dts: mediatek: mt7622: add missing "device_type" to memory nodes | *e66285df73arm64: dts: mt8183: Move CrosEC base detection node to kukui-based DTs | *657633a0b5arm64: dts: mt8183: kukui: Split out keyboard node and describe detachables | *ecec357981arm64: dts: mt8183: kukui: Add Type C node | *9d159d6637ipv6: mcast: remove one synchronize_net() barrier in ipv6_mc_down() | *a6a50788b4s390/vdso: drop '-fPIC' from LDFLAGS | *f94625ec57wifi: iwlwifi: mvm: don't set replay counters to 0xff | *4745cba370pwm: sti: Fix capture for st,pwm-num-chan < st,capture-num-chan | *55908ea981pwm: sti: Implement .apply() callback | *e888c4461ewifi: libertas: fix some memleaks in lbs_allocate_cmd_buffer() | *d20d45631fnet: blackhole_dev: fix build warning for ethh set but not used | *95ac8e3ef2pwm: atmel-hlcdc: Fix clock imbalance related to suspend support | *a1716999f8pwm: atmel-hlcdc: Use consistent variable naming | *81f0b319f0pwm: atmel-hlcdc: Convert to platform remove callback returning void | *98b0d46939arm64: dts: imx8mm-venice-gw71xx: fix USB OTG VBUS | *128a7fb7e8wifi: iwlwifi: fix EWRD table validity check | *96aa407616wifi: iwlwifi: dbg-tlv: ensure NUL termination | *3a5d424cffwifi: iwlwifi: mvm: report beacon protection failures | *f8ff4b4df7wifi: ath9k: delay all of ath9k_wmi_event_tasklet() until init is complete | *4287534cb5arm64: dts: imx8mm-kontron: Disable pull resistors for SD card signals on BL board | *d01012b6d6arm64: dts: imx8mm-kontron: Use the VSELECT signal to switch SD card IO voltage | *41af98f220arm64: dts: imx8mm-kontron: Add support for ultra high speed modes on SD card | *db25bbd2c2arm64: dts: imx8mm-kontron: Disable pullups for onboard UART signals on BL board | *f7e55ad752arm64: dts: imx8mm-kontron: Disable pullups for I2C signals on SL/BL i.MX8MM | *d7fcdcf4eccpufreq: mediatek-hw: Don't error out if supply is not found | *8a029ee1e3af_unix: Annotate data-race of gc_in_progress in wait_for_unix_gc(). | *e0d29c4defbpftool: Silence build warning about calloc() | *3b71a6981einet_diag: annotate data-races around inet_diag_table[] | *00d40ab2c0sock_diag: annotate data-races around sock_diag_handlers[family] | *0f632a6880cpufreq: mediatek-hw: Wait for CPU supplies before probing | *2cb670b272cpufreq: Explicitly include correct DT includes | *d951cf510fcpufreq: brcmstb-avs-cpufreq: add check for cpufreq_cpu_get's return value | *f75e3536dbwifi: mwifiex: debugfs: Drop unnecessary error check for debugfs_create_dir() | *df78377485wifi: wilc1000: fix multi-vif management when deleting a vif | *ac512507acwifi: rtl8xxxu: add cancel_work_sync() for c2hcmd_work | *d80fc43675wifi: wilc1000: fix RCU usage in connect path | *11b564991bwifi: wilc1000: fix declarations ordering | *bc4bc74646wifi: b43: Disable QoS for bcm4331 | *66ef38ad97wifi: b43: Stop correct queue in DMA worker when QoS is disabled | *b05f6cd6c0wifi: b43: Stop/wake correct queue in PIO Tx path when QoS is disabled | *04a2b6eff2wifi: b43: Stop/wake correct queue in DMA Tx path when QoS is disabled | *4c4e592266wifi: ath10k: fix NULL pointer dereference in ath10k_wmi_tlv_op_pull_mgmt_tx_compl_ev() | *b10ff1130fsched/fair: Take the scheduling domain into account in select_idle_core() | *3c1122aee9timekeeping: Fix cross-timestamp interpolation for non-x86 | *aa74fd5ccbtimekeeping: Fix cross-timestamp interpolation corner case decision | *48c70f35f6timekeeping: Fix cross-timestamp interpolation on counter wrap | *7dd09fa80baoe: fix the potential use-after-free problem in aoecmd_cfg_pkts | *53609f5c05rtc: test: Fix invalid format specifier. | *3eafb6816dtime: test: Fix incorrect format specifier | *770332c1fdlib/cmdline: Fix an invalid format specifier in an assertion msg | *01db522d00md: Don't clear MD_CLOSING when the raid is about to stop | *25d99f7baafs/select: rework stack allocation hack for clang | *98e60b538enbd: null check for nla_nest_start | *edbdb0d941s390/dasd: fix double module refcount decrement | *bb126ed29fs390/dasd: Use dev_*() for device log messages | *3404d535bds390/dasd: add autoquiesce feature | *932600a295s390/dasd: add copy pair setup | *2c42dab80as390/dasd: add query PPRC function | *815348211fs390/dasd: put block allocation in separate function | *423b6bdf19do_sys_name_to_handle(): use kzalloc() to fix kernel-infoleak | *50982ce0f1ASoC: wm8962: Fix up incorrect error message in wm8962_set_fll | *2a239a9487ASoC: wm8962: Enable both SPKOUTR_ENA and SPKOUTL_ENA in mono mode | *648bd8ef21ASoC: wm8962: Enable oscillator if selecting WM8962_FLL_OSC | *aa345a4d9bInput: gpio_keys_polled - suppress deferred probe error for gpio | *4bd9d06bdfASoC: Intel: bytcr_rt5640: Add an extra entry for the Chuwi Vi8 tablet | *91b4bfed82firewire: core: use long bus reset on gap count error | *8d1753973fBluetooth: rfcomm: Fix null-ptr-deref in rfcomm_check_security | *9a1de3adf7drm/amdgpu: Enable gpu reset for S3 abort cases on Raven series | *c4e2f60815ALSA: hda/realtek - ALC285 reduce pop noise from Headphone port | *d157b06c10scsi: mpt3sas: Prevent sending diag_reset when the controller is ready | *0c255fb9b1dm-verity, dm-crypt: align "struct bvec_iter" correctly | *f6cbb4843cblock: sed-opal: handle empty atoms when parsing response | *d7c5c0335aparisc/ftrace: add missing CONFIG_DYNAMIC_FTRACE check | *59be50a37fnet/iucv: fix the allocation size of iucv_path_table array | *e8a67fe34bx86/mm: Disallow vsyscall page read for copy_from_kernel_nofault() | *e2d5cf0dcbx86/mm: Move is_vsyscall_vaddr() into asm/vsyscall.h | *7e13a78e2briscv: dts: sifive: add missing #interrupt-cells to pmic | *cf71090a59RDMA/mlx5: Relax DEVX access upon modify commands | *60ba938a8bRDMA/mlx5: Fix fortify source warning while accessing Eth segment | *e524979a8agen_compile_commands: fix invalid escape sequence warning | *802eb0254fHID: multitouch: Add required quirk for Synaptics 0xcddc device | *581d99d2f6MIPS: Clear Cause.BD in instruction_pointer_set | *8082bccb7ax86/xen: Add some null pointer checking to smp.c | *333de5a975ASoC: rt5645: Make LattePanda board DMI match more precise | *0d7cfe2ef5selftests: tls: use exact comparison in recv_partial | *37d98fb9c3bpf: Defer the free of inner map when necessary | *d8140159a2rcu-tasks: Provide rcu_trace_implies_rcu_gp() | *d909d381c3io_uring: drop any code related to SCM_RIGHTS | *9dd3863e3fio_uring/unix: drop usage of io_uring socket * |f937385430Merge branch 'android14-5.15' into branch 'android14-5.15-lts' * |68b21b6f85ANDROID: GKI: add sg_copy_from/to_buffer to virtual device symbol list * |8c9fedf246Revert "regmap: allow to define reg_update_bits for no bus configuration" * |c89027ceeaRevert "regmap: Add bulk read/write callbacks into regmap_config" * |c00231146fRevert "serial: max310x: make accessing revision id interface-agnostic" * |e42b90b592Revert "serial: max310x: fix IO data corruption in batched operations" * |bff2c70560Revert "ALSA: usb-audio: Refcount multiple accesses on the single clock" * |f41d29ad04Revert "ALSA: usb-audio: Clear fixed clock rate at closing EP" * |7c2694fa40Revert "ALSA: usb-audio: Split endpoint setups for hw_params and prepare (take#2)" * |fb3086b8e6Revert "ALSA: usb-audio: Properly refcounting clock rate" * |195c12ce77Revert "ALSA: usb-audio: Apply mutex around snd_usb_endpoint_set_params()" * |3285ea33f4Revert "ALSA: usb-audio: Correct the return code from snd_usb_endpoint_set_params()" * |cf9556ce0bRevert "ALSA: usb-audio: Avoid superfluous endpoint setup" * |a3c598c3acRevert "ALSA: usb-audio: Add quirk for Tascam Model 12" * |16f74f5669Revert "ALSA: usb-audio: Add new quirk FIXED_RATE for JBL Quantum810 Wireless" * |22609e4015Revert "ALSA: usb-audio: Fix microphone sound on Nexigo webcam." * |9951a3b756Revert "ALSA: usb-audio: add quirk for RODE NT-USB+" * |9c86f89c6cRevert "ALSA: usb-audio: Fix wrong kfree issue in snd_usb_endpoint_free_all" * |7dcba26902Revert "ALSA: usb-audio: Always initialize fixed_rate in snd_usb_find_implicit_fb_sync_format()" * |c799355799Revert "ALSA: usb-audio: Add FIXED_RATE quirk for JBL Quantum610 Wireless" * |a73846e1f1Revert "ALSA: usb-audio: Sort quirk table entries" * |7f4aa22da9Merge 5.15.152 into android14-5.15-lts |\| | *b95c01af21Linux 5.15.152 | *a1211bbf78serial: max310x: fix IO data corruption in batched operations | *0ba485f90dserial: max310x: make accessing revision id interface-agnostic | *31642219f2regmap: Add bulk read/write callbacks into regmap_config | *fbddd48f14regmap: allow to define reg_update_bits for no bus configuration | *cad6da86caALSA: usb-audio: Sort quirk table entries | *36dba3f4cdALSA: usb-audio: Add FIXED_RATE quirk for JBL Quantum610 Wireless | *bfd36b1d18ALSA: usb-audio: Always initialize fixed_rate in snd_usb_find_implicit_fb_sync_format() | *a6f53df52bALSA: usb-audio: Fix wrong kfree issue in snd_usb_endpoint_free_all | *fd63fb84edfs/proc: do_task_stat: move thread_group_cputime_adjusted() outside of lock_task_sighand() | *9b3834276bproc: Use task_is_running() for wchan in /proc/$pid/stat | *3c1b2776efgetrusage: use sig->stats_lock rather than lock_task_sighand() | *ef2734e57cgetrusage: use __for_each_thread() | *18c7394e46getrusage: move thread_group_cputime_adjusted() outside of lock_task_sighand() | *c5579e7280getrusage: add the "signal_struct *sig" local variable | *63e09c1f46drm/amd/display: Increase frame-larger-than for all display_mode_vba files | *f4442513e4drm/amd/display: remove DML Makefile duplicate lines | *b4bab46400drm/amd/display: move calcs folder into DML | *b00e4d44acdrm/amd/display: Re-arrange FPU code structure for dcn2x | *b6d46f306bhv_netvsc: Register VF in netvsc_probe if NET_DEVICE_REGISTER missed | *c4cfa93e50hv_netvsc: use netif_is_bond_master() instead of open code | *760d0df3adselftests: mptcp: decrease BW in simult flows | *9a9d00c23ddrm/amdgpu: Reset IH OVERFLOW_CLEAR bit | *f574318960drm/amd/pm: do not expose the API used internally only in kv_dpm.c | *0afbf40c01serial: max310x: prevent infinite while() loop in port startup | *2fbf2c767bserial: max310x: use a separate regmap for each port | *2161c5411dserial: max310x: use regmap methods for SPI batch operations | *2aa7bcfdbbxhci: handle isoc Babble and Buffer Overrun events properly | *56e9aeb205xhci: process isoc TD properly when there was a transaction error mid TD. | *0d29b474fbselftests: mm: fix map_hugetlb failure on 64K page size systems | *0b08eb6372selftests/mm: switch to bash from sh | *fdfc5fabe8nfp: flower: add hardware offload check for post ct entry | *245332d4e7nfp: flower: add goto_chain_index for ct entry | *666334fdf4drm/amd/display: Fix uninitialized variable usage in core_link_ 'read_dpcd() & write_dpcd()' functions | *f354086d1bALSA: usb-audio: add quirk for RODE NT-USB+ | *80326ce1ebALSA: usb-audio: Fix microphone sound on Nexigo webcam. | *f1a68c6a41ALSA: usb-audio: Add new quirk FIXED_RATE for JBL Quantum810 Wireless | *d16ae91186ALSA: usb-audio: Add quirk for Tascam Model 12 | *7ce0a888d6ALSA: usb-audio: Avoid superfluous endpoint setup | *3191a00dbeALSA: usb-audio: Correct the return code from snd_usb_endpoint_set_params() | *06b6de69cfALSA: usb-audio: Apply mutex around snd_usb_endpoint_set_params() | *539493f147ALSA: usb-audio: Properly refcounting clock rate | *56e28371faALSA: usb-audio: Split endpoint setups for hw_params and prepare (take#2) | *8ca3315bd8ALSA: usb-audio: Clear fixed clock rate at closing EP | *9830e7383fALSA: usb-audio: Refcount multiple accesses on the single clock | *0866afaff1netrom: Fix data-races around sysctl_net_busy_read | *c558e54f77netrom: Fix a data-race around sysctl_netrom_link_fails_count | *f9c4d42464netrom: Fix a data-race around sysctl_netrom_routing_control | *4eacb242e2netrom: Fix a data-race around sysctl_netrom_transport_no_activity_timeout | *489e05c614netrom: Fix a data-race around sysctl_netrom_transport_requested_window_size | *85f34d352fnetrom: Fix a data-race around sysctl_netrom_transport_busy_delay | *33081e0f34netrom: Fix a data-race around sysctl_netrom_transport_acknowledge_delay | *f84f770948netrom: Fix a data-race around sysctl_netrom_transport_maximum_tries | *b8006cb0a3netrom: Fix a data-race around sysctl_netrom_transport_timeout | *775ed35498netrom: Fix data-races around sysctl_netrom_network_ttl_initialiser | *b3f0bc3a31netrom: Fix a data-race around sysctl_netrom_obsolescence_count_initialiser | *bbc21f134bnetrom: Fix a data-race around sysctl_netrom_default_path_quality | *101277e37derofs: apply proper VMA alignment for memory mapped files on THP | *b3c0f55382netfilter: nf_conntrack_h323: Add protection for bmp length out of range | *bd9c90927anetfilter: nft_ct: fix l3num expectations with inet pseudo family | *b562ebe21enet/rds: fix WARNING in rds_conn_connect_if_down | *f0363af961cpumap: Zero-initialise xdp_rxq_info struct before running XDP program | *cae3303257net/ipv6: avoid possible UAF in ip6_route_mpath_notify() | *8d95465d9anet: ice: Fix potential NULL pointer dereference in ice_bridge_setlink() | *e46274df11net: sparx5: Fix use after free inside sparx5_del_mact_entry | *e77e0b0f2ageneve: make sure to pull inner header in geneve_rx() | *be3be07d23tracing/net_sched: Fix tracepoints that save qdisc_dev() as a string | *e72b4e5e16i40e: disable NAPI right after disabling irqs when handling xsk_pool | *533953fa90ixgbe: {dis, en}able irqs in ixgbe_txrx_ring_{dis, en}able | *ea4e938d2cnet: lan78xx: fix runtime PM count underflow on link stop | *5ae5060e17mmc: mmci: stm32: fix DMA API overlapping mappings warning | *287093040fmmc: mmci: stm32: use a buffer for unaligned DMA requests * |5e761a5e91Merge 5.15.151 into android14-5.15-lts |\| | *5743626485Linux 5.15.151 | *4a4eeb6912mptcp: fix double-free on socket dismantle | *cc5e34bc5bRevert "tls: rx: move counting TlsDecryptErrors for sync" | *9d5932275bnet: tls: fix async vs NIC crypto offload | *68dbe92d67bpf: Derive source IP addr via bpf_*_fib_lookup() | *39b4ee40d2bpf: Add table ID to bpf_fib_lookup BPF helper | *75ca92271dbpf: Add BPF_FIB_LOOKUP_SKIP_NEIGH for bpf_fib_lookup | *20f5aafe52Revert "interconnect: Teach lockdep about icc_bw_lock order" | *fe549d8e97Revert "interconnect: Fix locking for runpm vs reclaim" | *ead6852245gpio: fix resource unwinding order in error path | *ea514ac5f1gpiolib: Fix the error path order in gpiochip_add_data_with_key() | *c21b5ad4e7gpio: 74x164: Enable output pins after registers are reset | *6c480d0f13af_unix: Drop oob_skb ref before purging queue in GC. | *2f3ae0905aRevert "drm/bridge: lt8912b: Register and attach our DSI device at probe" | *22850c9950fs,hugetlb: fix NULL pointer dereference in hugetlbs_fill_super | *94965be37acachefiles: fix memory leak in cachefiles_add_cache() | *cc32ba2fdfmptcp: fix possible deadlock in subflow diag | *af46c8a0d8mptcp: push at DSS boundaries | *5101e9f11amptcp: add needs_id for netlink appending addr | *4ba8702b23mptcp: clean up harmless false expressions | *f431a58cb9selftests: mptcp: add missing kconfig for NF Filter in v6 | *5d7f2e7d21selftests: mptcp: add missing kconfig for NF Filter | *55366b9ae9mptcp: rename timer related helper to less confusing names | *833d068e77mptcp: process pending subflow error on close | *305078c274mptcp: move __mptcp_error_report in protocol.c | *fbd16a1e4bx86/cpu/intel: Detect TME keyid bits before setting MTRR mask registers | *0779521576pmdomain: qcom: rpmhpd: Fix enabled_corner aggregation | *5f6e8930cammc: sdhci-xenon: fix PHY init clock stability | *f4fae0a76emmc: sdhci-xenon: add timeout for PHY init complete | *52af4f26c0mmc: core: Fix eMMC initialization with 1-bit bus connection | *4529c084a3dmaengine: fsl-qdma: init irq after reg initialization | *2dee8895a2dmaengine: ptdma: use consistent DMA masks | *106c1ac953dmaengine: fsl-qdma: fix SoC may hang on 16 byte unaligned read | *ab2d68655dbtrfs: dev-replace: properly validate device names | *063715c33bwifi: nl80211: reject iftype change with mesh ID change | *9376d059a7gtp: fix use-after-free and null-ptr-deref in gtp_newlink() | *cbf67001d6ALSA: firewire-lib: fix to check cycle continuity | *7d930a4da1tomoyo: fix UAF write bug in tomoyo_write_control() | *5941a90c55riscv: Sparse-Memory/vmemmap out-of-bounds fix | *80b1534649afs: Fix endless loop in directory parsing | *20a4b5214ffbcon: always restore the old font data in fbcon_do_set_font() | *5eac17127eALSA: Drop leftover snd-rtctimer stuff from Makefile | *e601ae8191power: supply: bq27xxx-i2c: Do not free non existing IRQ | *4b73473c05efi/capsule-loader: fix incorrect allocation size | *5bc8810b78tls: decrement decrypt_pending if no async completion will be called | *9ae48288fctls: rx: use async as an in-out argument | *bdb7fb2923tls: rx: assume crypto always calls our callback | *2ec59e1655tls: rx: move counting TlsDecryptErrors for sync | *b61dbb5ef4tls: rx: don't track the async count | *4fd23a600btls: rx: factor out writing ContentType to cmsg | *9876554897tls: rx: wrap decryption arguments in a structure | *d6c9c2a66ctls: rx: don't report text length from the bowels of decrypt | *ffc8a2b821tls: rx: drop unnecessary arguments from tls_setup_from_iter() | *1abd49fa1ftls: hw: rx: use return value of tls_device_decrypted() to carry status | *432d40036ftls: rx: refactor decrypt_skb_update() | *17d8bda2a6tls: rx: don't issue wake ups when data is decrypted | *de0970d258tls: rx: don't store the decryption status in socket context | *4c68bf84d1tls: rx: don't store the record type in socket context | *f1e7190937igb: extend PTP timestamp adjustments to i211 | *a1227b27fcrtnetlink: fix error logic of IFLA_BRIDGE_FLAGS writing back | *7c3f285996netfilter: bridge: confirm multicast packets before passing them up the stack | *3e9cd89136netfilter: let reset rules clean out conntrack entries | *c3a84f83d9netfilter: make function op structures const | *2cb39bea70netfilter: core: move ip_ct_attach indirection to struct nf_ct_hook | *84d3baab4bnetfilter: nfnetlink_queue: silence bogus compiler warning | *4225152bfbnetfilter: nf_tables: allow NFPROTO_INET in nft_(match/target)_validate() | *af1a9a925eBluetooth: Enforce validation on max value of connection interval | *c3df637266Bluetooth: hci_event: Fix handling of HCI_EV_IO_CAPA_REQUEST | *4cd28dae82Bluetooth: hci_event: Fix wrongly recorded wakeup BD_ADDR | *da4569d450Bluetooth: Avoid potential use-after-free in hci_error_reset | *8e99556301stmmac: Clear variable when destroying workqueue | *28bbdb4e19uapi: in6: replace temporary label with rfc9486 | *1e2cbdbdfanet: usb: dm9601: fix wrong return value in dm9601_mdio_read | *9b1f5c0032veth: try harder when allocating queue memory | *914c73e787net: enable memcg accounting for veth queues | *8d4d26f51elan78xx: enable auto speed configuration for LAN7850 if no EEPROM is detected | *8a54834c03ipv6: fix potential "struct net" leak in inet6_rtm_getaddr() | *f011c103e6net: veth: clear GRO when clearing XDP even when down | *bf3f0c4169cpufreq: intel_pstate: fix pstate limits enforcement for adjust_perf call back | *cbfd27689btun: Fix xdp_rxq_info's queue_index when detaching | *afec0c5cd2net: ip_tunnel: prevent perpetual headroom growth | *c71ed29d15netlink: Fix kernel-infoleak-after-free in __skb_datagram_iter | *386bb2537emtd: spinand: gigadevice: Fix the get ecc status issue | *00b19ee0dcnetfilter: nf_tables: disallow timeout for anonymous sets * |0b46d0d139Merge branch 'android14-5.15' into branch 'android14-5.15-lts' * |c9bf6f2822ANDROID: add blk_mq_freeze_queue and blk_mq_unfreeze_queue to virtual device symbol list * |9593a93b85Revert "net: dev: Convert sa_data to flexible array in struct sockaddr" * |8efd374b4eRevert "arp: Prevent overflow in arp_req_get()." * |f2df20f4c1Revert "usb: roles: fix NULL pointer issue when put module's reference" * |784572c0ebRevert "usb: roles: don't get/set_role() when usb_role_switch is unregistered" * |28752f0260Revert "mptcp: fix lockless access in subflow ULP diag" * |7a5094aac5Revert "xhci: cleanup xhci_hub_control port references" * |14d24110f6Revert "xhci: move port specific items such as state completions to port structure" * |f7f70f0d86Revert "xhci: rename resume_done to resume_timestamp" * |4e98a48adcRevert "xhci: clear usb2 resume related variables in one place." * |09b0a696c5Revert "xhci: decouple usb2 port resume and get_port_status request handling" * |d6a30b0b4eRevert "xhci: track port suspend state correctly in unsuccessful resume cases" * |792aa870d5Revert "posix-timers: Ensure timer ID search-loop limit is valid" * |05c0bbb7b1Merge 5.15.150 into android14-5.15-lts |/ *80efc62652Linux 5.15.150 *da6cabc198r8169: use new PM macros *b7f3fac6d3netfilter: nf_tables: can't schedule in nft_chain_validate *a4efc62cd1ext4: avoid bb_free and bb_fragments inconsistency in mb_free_blocks() *c1317822e2ext4: regenerate buddy after block freeing failed if under fc replay *d82ec7529cnetfilter: nf_tables: fix scheduling-while-atomic splat *97eaa2955darp: Prevent overflow in arp_req_get(). *d7b6fa97ecfs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio *df31d05f06cifs: fix mid leak during reconnection after timeout threshold *aade859419i2c: imx: when being a target, mark the last read as processed *cb21407f0bi2c: imx: Add timer for handling the stop condition *33f649f1b1drm/amd/display: Fix memory leak in dm_sw_fini() *9a03126588drm/syncobj: call drm_syncobj_fence_add_wait when WAIT_AVAILABLE flag is set *13b57b5cd5netfilter: nft_flow_offload: release dst in case direct xmit path is used *4c167af9f6netfilter: nft_flow_offload: reset dst in route object after setting up flow *7c71b83122netfilter: flowtable: simplify route logic *664264a5c5netfilter: nf_tables: set dormant flag on hook register failure *4338032aa9tls: stop recv() if initial process_rx_list gave us non-DATA *ea845237a3tls: rx: drop pointless else after goto *8b32e43a80tls: rx: jump to a more appropriate label *39603a6d4es390: use the correct count for __iowrite64_copy() *8cae520f21octeontx2-af: Consider the action set by PF *6dae096960drm/nouveau/instmem: fix uninitialized_var.cocci warning *4d3b2bd995net: dev: Convert sa_data to flexible array in struct sockaddr *d65ec3e48fpacket: move from strlcpy with unused retval to strscpy *91b020aaa1ipv6: sr: fix possible use-after-free and null-ptr-deref *e56662160fafs: Increase buffer size in afs_update_volume_status() *5268bb0210bpf: Fix racing between bpf_timer_cancel_and_free and bpf_timer_cancel *6800ad7417ata: ahci_ceva: fix error handling for Xilinx GT PHY support *7fcc31a3a7ata: libahci_platform: Introduce reset assertion/deassertion methods *ddac2e0e65ata: libahci_platform: Convert to using devm bulk clocks API *302b92b373ipv6: properly combine dev_base_seq and ipv6.dev_addr_genid *a75b495478ipv4: properly combine dev_base_seq and ipv4.dev_addr_genid *2a7b878a7dnet: stmmac: Fix incorrect dereference in interrupt handlers *a41d9142d2nouveau: fix function cast warnings *1087c284fdscsi: jazz_esp: Only build if SCSI core is builtin *4e395fb89ebpf, scripts: Correct GPL license name *cd6070d9f5RDMA/srpt: fix function pointer cast warnings *656bd1702farm64: dts: rockchip: set num-cs property for spi on px30 *135e5465feRDMA/qedr: Fix qedr_create_user_qp error flow *989af2f293RDMA/srpt: Support specifying the srpt_service_guid parameter *b6e660e076RDMA/irdma: Add AE for too many RNRS *056ed95befRDMA/irdma: Set the CQ read threshold for GEN 1 *a95d4cf827RDMA/irdma: Validate max_send_wr and max_recv_wr *635d79aa47RDMA/irdma: Fix KASAN issue with tasklet *aeb5ac1c9dRDMA/bnxt_re: Return error for SRQ resize *52de5805c1IB/hfi1: Fix a memleak in init_credit_return *48c63a1744cifs: add a warning when the in-flight count goes negative *6538b6d13cxhci: track port suspend state correctly in unsuccessful resume cases *8839d5728bxhci: decouple usb2 port resume and get_port_status request handling *8af9de2a5bxhci: clear usb2 resume related variables in one place. *a99c8f1abexhci: rename resume_done to resume_timestamp *63f0e79cf3xhci: move port specific items such as state completions to port structure *ea6c19c736xhci: cleanup xhci_hub_control port references *95973afc87ACPI: resource: Skip IRQ override on ASUS ExpertBook B1502CBA *4f080b6487ACPI: resource: Skip IRQ override on Asus Expertbook B2402CBA *c2a9376d50ACPI: resource: Add Asus ExpertBook B2502 to Asus quirks *1b64ff947aACPI: resource: Skip IRQ override on Asus Vivobook S5602ZA *f3607954f2ACPI: resource: Add ASUS model S5402ZA to quirks *27e99d7857ACPI: video: Add backlight=native DMI quirk for Apple iMac12,1 and iMac12,2 *cb1003c07eARM: dts: BCM53573: Describe on-SoC BCM53125 rev 4 switch *28e5e3e59barm64: dts: rockchip: add SPDIF node for ROCK Pi 4 *99c8b2e997arm64: dts: rockchip: add ES8316 codec for ROCK Pi 4 *371036bf76arm64: dts: rockchip: fix regulator name on rk3399-rock-4 *92dcd7d6c6exfat: support dynamic allocate bh for exfat_entry_set_cache *b4dc693b29wifi: iwlwifi: mvm: avoid baid size integer overflow *fa92c463ebigb: Fix igb_down hung on surprise removal *16f653776cwifi: wext-core: Fix -Wstringop-overflow warning in ioctl_standard_iw_point() *7552020e3adevlink: report devlink_port_type_warn source device *819ca25444bpf: Address KCSAN report on bpf_lru_list *f97832620dwifi: ath11k: fix registration of 6Ghz-only phy without the full channel range *3cb43222basched/fair: Don't balance task to its current running CPU *621619f626arm64: mm: fix VA-range sanity check *0bd309f226arm64: set __exception_irq_entry with __irq_entry as a default *dd0802f0a9ACPI: video: Add backlight=native DMI quirk for Lenovo ThinkPad X131e (3371 AMD version) *3cc2d66b12ACPI: video: Add backlight=native DMI quirk for Apple iMac11,3 *54da51be3bACPI: button: Add lid disable DMI quirk for Nextbook Ares 8A *fa33b70513btrfs: add xxhash to fast checksum implementations *ef535e0315posix-timers: Ensure timer ID search-loop limit is valid *84a578961bmd/raid10: prevent soft lockup while flush writes *6b03364b29md: fix data corruption for raid456 when reshape restart while grow up *638eaac374nbd: Add the maximum limit of allocated index in nbd_dev_add *173e191012debugobjects: Recheck debug_objects_enabled before reporting *de2efb42d6netfilter: nf_tables: add rescheduling points during loop detection walks *a022c339afnet/sched: Refactor qdisc_graft() for ingress and clsact Qdiscs *65acad6791Input: iqs269a - do not poll during ATI *13b1dee7e1Input: iqs269a - do not poll during suspend or resume *f33ba1ec4aInput: iqs269a - switch to DEFINE_SIMPLE_DEV_PM_OPS() and pm_sleep_ptr() *dba0691272PM: core: Remove static qualifier in DEFINE_SIMPLE_DEV_PM_OPS macro *995e77b873mmc: mxc: Use the new PM macros *8bc597732cmmc: jz4740: Use the new PM macros *75d4f92d87PM: core: Add new *_PM_OPS macros, deprecate old ones *53f7337519PM: core: Redefine pm_ptr() macro *a51c253d83powerpc/eeh: Set channel state after notifying the drivers *4570db06b7powerpc/eeh: Small refactor of eeh_handle_normal_event() *12dd4a0848powerpc/rtas: ensure 4KB alignment for rtas_data_buf *8afaf74307powerpc/rtas: make all exports GPL *2240f4c5f5net: ethernet: ti: add missing of_node_put before return *18721a8373dt-bindings: clocks: imx8mp: Add ID for usb suspend clock *fb100de778clk: imx8mp: add clkout1/2 support *3c8a513f0fclk: imx8mp: Add DISP2 pixel clock *3517b6d614serial: 8250: Remove serial_rs485 sanitization from em485 *54974aad4acifs: remove useless parameter 'is_fsctl' from SMB2_ioctl() *15c3ddd118kernel/sched: Remove dl_boosted flag comment *a1733ffd88drm/i915/dg1: Update DMC_DEBUG3 register *8102416c05f2fs: write checkpoint during FG_GC *cfd5d011d6f2fs: don't set GC_FAILURE_PIN for background GC *56b522f466drm/amdgpu: init iommu after amdkfd device init *572ee5086etools/virtio: fix build *80f2a24622perf beauty: Update copy of linux/socket.h with the kernel sources *47b6345ddbtools headers UAPI: Sync linux/fscrypt.h with the kernel sources *c65a23e98eARM: dts: BCM53573: Drop nonexistent "default-off" LED trigger *2eb3d2a54aacpi: property: Let args be NULL in __acpi_node_get_property_reference *7abdd666a0platform/x86: asus-wmi: Document the dgpu_disable sysfs attribute *7de3c1535bclk: linux/clk-provider.h: fix kernel-doc warnings and typos *b184742d27RDMA/siw: Correct wrong debug message *6f6ec8aff2RDMA/siw: Balance the reference of cep->kref in the error path *71475bcee0ARM: dts: BCM53573: Drop nonexistent #usb-cells *832cf206dfselftests: net: vrf-xfrm-tests: change authentication and encryption algos *14e1f63b39vdpa/mlx5: Don't clear mr struct on destroy MR *5b4f6c5ff6MIPS: vpe-mt: drop physical_memsize *1be5de5b64MIPS: SMP-CPS: fix build error when HOTPLUG_CPU not set *cc24b32d7dpowerpc/pseries/lpar: add missing RTAS retry status handling *3212606148powerpc/perf/hv-24x7: add missing RTAS retry status handling *e3835122eapowerpc/pseries/lparcfg: add missing RTAS retry status handling *228d3c4919clk: Honor CLK_OPS_PARENT_ENABLE in clk_core_is_enabled() *d0e4a44455clk: qcom: gpucc-sdm845: fix clk_dis_wait being programmed for CX GDSC *e7076cfb72clk: qcom: gpucc-sc7180: fix clk_dis_wait being programmed for CX GDSC *83c043b92bpowerpc/powernv/ioda: Skip unallocated resources when mapping to PE *8c373aa1f7Input: ads7846 - don't check penirq immediately for 7845 *6a37a429b3Input: ads7846 - always set last command to PWRDOWN *199e666477clk: imx: avoid memory leak *94957e54dcclk: renesas: cpg-mssr: Remove superfluous check in resume code *2d89ed2e06Input: ads7846 - don't report pressure for ads7845 *f992d1afd1clk: renesas: cpg-mssr: Fix use after free if cpg_mssr_common_init() failed *d73cf59d24Input: iqs269a - increase interrupt handler return delay *db06a2ae07Input: iqs269a - configure device with a single block write *fdbceead4aInput: iqs269a - drop unused device node references *d93c68661aRISC-V: fix funct4 definition for c.jalr in parse_asm.h *5c5c02b069mtd: rawnand: sunxi: Fix the size of the last OOB region *11fcd28df8clk: qcom: gcc-qcs404: fix names of the DSI clocks used as parents *9fcba5e7bbclk: qcom: gcc-qcs404: disable gpll[04]_out_aux parents *7602e5e1bdclk: imx: imx8mp: add shared clk gate for usb suspend clk *7d6e8d7ee1mptcp: fix lockless access in subflow ULP diag *256c3e6192usb: roles: don't get/set_role() when usb_role_switch is unregistered *ef982fc410usb: roles: fix NULL pointer issue when put module's reference *2cb66b62a5usb: gadget: ncm: Avoid dropping datagrams of properly parsed NTBs *3a2a909942usb: cdns3: fix memory double free when handle zero packet *4e5c73b15dusb: cdns3: fixed memory use after free at cdns3_gadget_ep_disable() *f4928121f7usb: cdnsp: fixed issue with incorrect detecting CDNSP family controllers *7c532fb96ausb: cdnsp: blocked some cdns3 specific code *c98f2d25f8usb: dwc3: gadget: Don't disconnect if not started *f4fab74cb8serial: amba-pl011: Fix DMA transmission in RS485 mode *2c62c8984bx86/alternative: Make custom return thunk unconditional *b0c9fcacf2Revert "x86/alternative: Make custom return thunk unconditional" *ae815291f0x86/returnthunk: Allow different return thunks *5ca1f6adacx86/ftrace: Use alternative RET encoding *b9d69bfff6x86/ibt,paravirt: Use text_gen_insn() for paravirt_patch() *b810c58d8bx86/text-patching: Make text_gen_insn() play nice with ANNOTATE_NOENDBR *8943e3c944Revert "x86/ftrace: Use alternative RET encoding" *eec6cbbfa1ARM: ep93xx: Add terminator to gpiod_lookup_table *0da15a7039l2tp: pass correct message length to ip6_append_data *9d71d7a9f2PCI/MSI: Prevent MSI hardware interrupt number truncation *a576308800gtp: fix use-after-free and null-ptr-deref in gtp_genl_dump_pdp() *d81e2dc203KVM: arm64: vgic-its: Test for valid IRQ in its_sync_lpi_pending_table() *4deb8413ecKVM: arm64: vgic-its: Test for valid IRQ in MOVALL handler *e20b24b175platform/x86: touchscreen_dmi: Allow partial (prefix) matches for ACPI names *79d7504a24platform/x86: intel-vbtn: Stop calling "VBDL" from notify_handler *1a4371db68dm-crypt: don't modify the data when using authenticated encryption *d580f0dcb5drm/ttm: Fix an invalid freeing on already freed page in error path *47ae64df23IB/hfi1: Fix sdma.h tx->num_descs off-by-one error *77cbc04a1aerofs: fix lz4 inplace decompression *fbb662ffa0pmdomain: renesas: r8a77980-sysc: CR7 must be always on *43ea43b6faksmbd: free aux buffer if ksmbd_iov_pin_rsp_read fails *475426ad1apmdomain: mediatek: fix race conditions with genpd *2a52590ac5virtio-blk: Ensure no requests in virtqueues before deleting vqs. *b9a61ee2bbdrm/amdgpu: reset gpu for s3 suspend abort case *afc74fda2bdrm/amdgpu: skip to program GFXDEC registers for suspend abort *dcd33edd85firewire: core: send bus reset promptly on gap count error *a74270a1b7scsi: lpfc: Use unsigned type for num_sge *26b8bdb556hwmon: (coretemp) Enlarge per package core count limit *a2f99731abefi: Don't add memblocks for soft-reserved memory *4aa36b62c3efi: runtime: Fix potential overflow of soft-reserved region size *262dc4fb15wifi: mac80211: adding missing drv_mgd_complete_tx() call *a585faf059fs/ntfs3: Fix oob in ntfs_listxattr *0a3548e824fs/ntfs3: Update inode->i_size after success write into compressed file *c39c689a82fs/ntfs3: Correct function is_rst_area_valid *54142e95dffs/ntfs3: Prevent generic message "attempt to access beyond end of device" *095d6a66bcfs/ntfs3: use non-movable memory for ntfs3 MFT buffer cache *3f3a6ebf6afs/ntfs3: Disable ATTR_LIST_ENTRY size check *ee8db6475cfs/ntfs3: Add NULL ptr dereference checking at the end of attr_allocate_frame() *56dacb722bfs/ntfs3: Fix detected field-spanning write (size 8) of single field "le->name" *3532bceaedfs/ntfs3: Print warning while fixing hard links count *f14132b883fs/ntfs3: Correct hard links updating when dealing with DOS names *cd465584d5fs/ntfs3: Improve ntfs_dir_count *3f7920b36dfs/ntfs3: Modified fix directory element type detection *b4663b406aInput: i8042 - add Fujitsu Lifebook U728 to i8042 quirk table *9b1e3cf9edext4: correct the hole length returned by ext4_map_blocks() *46e64b9a4bnvmet-fc: take ref count on tgtport before delete assoc *5e0bc09a52nvmet-fc: avoid deadlock on delete association path *f323185c79nvmet-fc: abort command when there is no binding *59b4ca71abnvmet-fc: hold reference on hostport match *8fd604d4b0nvmet-fc: defer cleanup using RCU properly *8f7104e18fnvmet-fc: release reference on target port *071f116416nvmet-fcloop: swap the list_add_tail arguments *0bf567d6d9nvme-fc: do not wait in vain when unloading module *75e34de642ALSA: usb-audio: Ignore clock selector errors for single connection *a75d89666cnetfilter: conntrack: check SCTP_CID_SHUTDOWN_ACK for vtag setting in sctp_new *4a5ed46972Input: xpad - add Lenovo Legion Go controllers *1e9af43d5dspi: sh-msiof: avoid integer overflow in constants *ef1e3f277aASoC: sunxi: sun4i-spdif: Add support for Allwinner H616 *e59905cfb1ALSA: usb-audio: Check presence of valid altsetting control *065da538e6nvmet-tcp: fix nvme tcp ida memory leak *f8dee8e489regulator: pwm-regulator: Add validity checks in continuous .get_voltage *4fe4e5adc7dmaengine: ti: edma: Add some null pointer checks to the edma_probe *8de8305a25ext4: avoid allocating blocks from corrupted group in ext4_mb_find_by_goal() *4c21fa60a6ext4: avoid allocating blocks from corrupted group in ext4_mb_try_best_found() *687061cfaaext4: avoid dividing by 0 in mb_update_avg_fragment_size() when block bitmap corrupt *3700475e09platform/x86: touchscreen_dmi: Add info for the TECLAST X16 Plus tablet *343c198168MIPS: reserve exception vector space ONLY ONCE *b4c13deff3ahci: add 43-bit DMA address quirk for ASMedia ASM1061 controllers *1a8bd62449ahci: asm1166: correct count of reported ports *0399d7eba4spi: hisi-sfc-v3xx: Return IRQ_NONE if no interrupts were detected *df6e2088c6fbdev: sis: Error out if pixclock equals zero *8c54acf33efbdev: savage: Error out if pixclock equals zero *88c18fd066wifi: mac80211: fix race condition on enabling fast-xmit *212f20d5b1wifi: cfg80211: fix missing interfaces when dumping *37d82e6ac9dmaengine: fsl-qdma: increase size of 'irq_name' *3692c6f2b5dmaengine: shdma: increase size of 'dev_id' *a9849b67b4scsi: target: core: Add TMF to tmr_list handling *0766e7317asched/rt: Disallow writing invalid values to sched_rt_period_us *5295b5f2e5sched/rt: Fix sysctl_sched_rr_timeslice intial value *8bd3eee772x86/fpu: Stop relying on userspace for info to fault in xsave buffer *c017fbf105zonefs: Improve error handling *bbc432e632userfaultfd: fix mmap_changing checking in mfill_atomic_hugetlb *4bbb93ad84bpf: Remove trace_printk_lock *4b349c55bbbpf: Do cleanup in bpf_bprintf_cleanup only when needed *bcbaeb081abpf: Add struct for bin_args arg in bpf_bprintf_prepare *8495c34dffbpf: Merge printk and seq_printf VARARG max macros *ab2e127896PCI: dwc: Fix a 64bit bug in dw_pcie_ep_raise_msix_irq() *5034989393sched/rt: sysctl_sched_rr_timeslice show default timeslice after reset *ee0fb9baa7smb: client: fix parsing of SMB3.1.1 POSIX create context *890bc4fac3smb: client: fix potential OOBs in smb2_parse_contexts() *858e73ff25smb: client: fix OOB in receive_encrypted_standard() *6e5e93fd51net/sched: Retire dsmark qdisc *c3fdf76849net/sched: Retire ATM qdisc *78bac52c29net/sched: Retire CBQ qdisc Change-Id: Ifc5593f64dc2c4fee8d345cd0e475050629f6498 Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
This commit is contained in:
@@ -57,3 +57,12 @@ Description:
|
||||
* 0 - default,
|
||||
* 1 - overboost,
|
||||
* 2 - silent
|
||||
|
||||
What: /sys/devices/platform/<platform>/dgpu_disable
|
||||
Date: Aug 2022
|
||||
KernelVersion: 5.17
|
||||
Contact: "Luke Jones" <luke@ljones.dev>
|
||||
Description:
|
||||
Disable discrete GPU:
|
||||
* 0 - Enable dGPU,
|
||||
* 1 - Disable dGPU
|
||||
|
||||
@@ -1088,8 +1088,12 @@
|
||||
nopku [X86] Disable Memory Protection Keys CPU feature found
|
||||
in some Intel CPUs.
|
||||
|
||||
<module>.async_probe [KNL]
|
||||
Enable asynchronous probe on this module.
|
||||
<module>.async_probe[=<bool>] [KNL]
|
||||
If no <bool> value is specified or if the value
|
||||
specified is not a valid <bool>, enable asynchronous
|
||||
probe on this module. Otherwise, enable/disable
|
||||
asynchronous probe on this module as indicated by the
|
||||
<bool> value. See also: module.async_probe
|
||||
|
||||
early_ioremap_debug [KNL]
|
||||
Enable debug messages in early_ioremap support. This
|
||||
@@ -3185,6 +3189,15 @@
|
||||
For details see:
|
||||
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst
|
||||
|
||||
module.async_probe=<bool>
|
||||
[KNL] When set to true, modules will use async probing
|
||||
by default. To enable/disable async probing for a
|
||||
specific module, use the module specific control that
|
||||
is documented under <module>.async_probe. When both
|
||||
module.async_probe and <module>.async_probe are
|
||||
specified, <module>.async_probe takes precedence for
|
||||
the specific module.
|
||||
|
||||
module.sig_enforce
|
||||
[KNL] When CONFIG_MODULE_SIG is set, this means that
|
||||
modules without (valid) signatures will fail to load.
|
||||
|
||||
2
Makefile
2
Makefile
@@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 5
|
||||
PATCHLEVEL = 15
|
||||
SUBLEVEL = 149
|
||||
SUBLEVEL = 153
|
||||
EXTRAVERSION =
|
||||
NAME = Trick or Treat
|
||||
|
||||
|
||||
@@ -35362,11 +35362,6 @@ member {
|
||||
id: 0x20748443
|
||||
type_id: 0x0efc611f
|
||||
}
|
||||
member {
|
||||
id: 0x2082f479
|
||||
type_id: 0x0d25bd0f
|
||||
offset: 11520
|
||||
}
|
||||
member {
|
||||
id: 0x2098ac9a
|
||||
type_id: 0x0d4ccc92
|
||||
@@ -35568,6 +35563,11 @@ member {
|
||||
id: 0x27e3d457
|
||||
type_id: 0x10a1214c
|
||||
}
|
||||
member {
|
||||
id: 0x28012bb9
|
||||
type_id: 0x2f2ac20c
|
||||
offset: 11520
|
||||
}
|
||||
member {
|
||||
id: 0x28026f1f
|
||||
type_id: 0x2f27cc6c
|
||||
@@ -78175,10 +78175,10 @@ member {
|
||||
offset: 576
|
||||
}
|
||||
member {
|
||||
id: 0xcbce1938
|
||||
id: 0xcbce1148
|
||||
name: "exit_work"
|
||||
type_id: 0x1f3c8679
|
||||
offset: 1408
|
||||
offset: 1344
|
||||
}
|
||||
member {
|
||||
id: 0x154265da
|
||||
@@ -79228,10 +79228,10 @@ member {
|
||||
offset: 10248
|
||||
}
|
||||
member {
|
||||
id: 0x2bc8fdc9
|
||||
id: 0x2bc8f5ab
|
||||
name: "fallback_llist"
|
||||
type_id: 0x0bf3e543
|
||||
offset: 256
|
||||
offset: 192
|
||||
}
|
||||
member {
|
||||
id: 0x1e0adfa4
|
||||
@@ -79239,10 +79239,10 @@ member {
|
||||
type_id: 0x214d9bc0
|
||||
}
|
||||
member {
|
||||
id: 0xfa3ad6ea
|
||||
id: 0xfa3ad186
|
||||
name: "fallback_work"
|
||||
type_id: 0xf1159c31
|
||||
offset: 320
|
||||
offset: 256
|
||||
}
|
||||
member {
|
||||
id: 0x5261bd5a
|
||||
@@ -91024,10 +91024,9 @@ member {
|
||||
type_id: 0x92233392
|
||||
}
|
||||
member {
|
||||
id: 0xdd1ec771
|
||||
id: 0xdd1ec390
|
||||
name: "hash_map"
|
||||
type_id: 0x3e2fe44b
|
||||
offset: 64
|
||||
}
|
||||
member {
|
||||
id: 0xa31ad885
|
||||
@@ -100708,16 +100707,16 @@ member {
|
||||
offset: 320
|
||||
}
|
||||
member {
|
||||
id: 0x3dd488c8
|
||||
id: 0x3dd48315
|
||||
name: "iowq_limits"
|
||||
type_id: 0x5eeb4a25
|
||||
offset: 2176
|
||||
offset: 2112
|
||||
}
|
||||
member {
|
||||
id: 0x15478239
|
||||
id: 0x15478e55
|
||||
name: "iowq_limits_set"
|
||||
type_id: 0x6d7f5ff6
|
||||
offset: 2240
|
||||
offset: 2176
|
||||
}
|
||||
member {
|
||||
id: 0xd364d156
|
||||
@@ -116917,10 +116916,10 @@ member {
|
||||
offset: 11328
|
||||
}
|
||||
member {
|
||||
id: 0xf2c3c54a
|
||||
id: 0xf2c3c441
|
||||
name: "mm_account"
|
||||
type_id: 0x1b36c7a2
|
||||
offset: 192
|
||||
offset: 128
|
||||
}
|
||||
member {
|
||||
id: 0x8a013cf5
|
||||
@@ -147770,10 +147769,10 @@ member {
|
||||
offset: 1728
|
||||
}
|
||||
member {
|
||||
id: 0x859f0dbd
|
||||
id: 0x859f077e
|
||||
name: "ref_comp"
|
||||
type_id: 0x3fcbf304
|
||||
offset: 1920
|
||||
offset: 1856
|
||||
}
|
||||
member {
|
||||
id: 0x53e1405b
|
||||
@@ -153148,11 +153147,6 @@ member {
|
||||
type_id: 0x4585663f
|
||||
offset: 864
|
||||
}
|
||||
member {
|
||||
id: 0x55fafd4f
|
||||
name: "ring_sock"
|
||||
type_id: 0x106029c6
|
||||
}
|
||||
member {
|
||||
id: 0x7633aeb9
|
||||
name: "rings"
|
||||
@@ -174365,10 +174359,10 @@ member {
|
||||
offset: 256
|
||||
}
|
||||
member {
|
||||
id: 0x3660523a
|
||||
id: 0x3660536c
|
||||
name: "tctx_list"
|
||||
type_id: 0xd3c80119
|
||||
offset: 1792
|
||||
offset: 1728
|
||||
}
|
||||
member {
|
||||
id: 0x43a6cfb9
|
||||
@@ -183953,18 +183947,18 @@ member {
|
||||
type_id: 0x181ee594
|
||||
offset: 1408
|
||||
}
|
||||
member {
|
||||
id: 0x042a2402
|
||||
name: "user"
|
||||
type_id: 0x181ee594
|
||||
offset: 64
|
||||
}
|
||||
member {
|
||||
id: 0x042a27fc
|
||||
name: "user"
|
||||
type_id: 0x181ee594
|
||||
offset: 1024
|
||||
}
|
||||
member {
|
||||
id: 0x042a2921
|
||||
name: "user"
|
||||
type_id: 0x181ee594
|
||||
offset: 128
|
||||
}
|
||||
member {
|
||||
id: 0x042a2c60
|
||||
name: "user"
|
||||
@@ -192543,24 +192537,6 @@ struct_union {
|
||||
member_id: 0xadaeae8c
|
||||
}
|
||||
}
|
||||
struct_union {
|
||||
id: 0x0d25bd0f
|
||||
kind: STRUCT
|
||||
definition {
|
||||
bytesize: 288
|
||||
member_id: 0x55fafd4f
|
||||
member_id: 0xdd1ec771
|
||||
member_id: 0x042a2921
|
||||
member_id: 0xf2c3c54a
|
||||
member_id: 0x2bc8fdc9
|
||||
member_id: 0xfa3ad6ea
|
||||
member_id: 0xcbce1938
|
||||
member_id: 0x3660523a
|
||||
member_id: 0x859f0dbd
|
||||
member_id: 0x3dd488c8
|
||||
member_id: 0x15478239
|
||||
}
|
||||
}
|
||||
struct_union {
|
||||
id: 0x0d2844e8
|
||||
kind: STRUCT
|
||||
@@ -194305,6 +194281,23 @@ struct_union {
|
||||
member_id: 0x6ec6b7fe
|
||||
}
|
||||
}
|
||||
struct_union {
|
||||
id: 0x2f2ac20c
|
||||
kind: STRUCT
|
||||
definition {
|
||||
bytesize: 280
|
||||
member_id: 0xdd1ec390
|
||||
member_id: 0x042a2402
|
||||
member_id: 0xf2c3c441
|
||||
member_id: 0x2bc8f5ab
|
||||
member_id: 0xfa3ad186
|
||||
member_id: 0xcbce1148
|
||||
member_id: 0x3660536c
|
||||
member_id: 0x859f077e
|
||||
member_id: 0x3dd48315
|
||||
member_id: 0x15478e55
|
||||
}
|
||||
}
|
||||
struct_union {
|
||||
id: 0x2f802e01
|
||||
kind: STRUCT
|
||||
@@ -216478,7 +216471,7 @@ struct_union {
|
||||
member_id: 0x296b856d
|
||||
member_id: 0x5c36e689
|
||||
member_id: 0x22694cf6
|
||||
member_id: 0x2082f479
|
||||
member_id: 0x28012bb9
|
||||
}
|
||||
}
|
||||
struct_union {
|
||||
|
||||
@@ -18,6 +18,8 @@
|
||||
bpf_trace_run4
|
||||
bpf_trace_run5
|
||||
bpf_trace_run6
|
||||
blk_mq_freeze_queue
|
||||
blk_mq_unfreeze_queue
|
||||
bt_err
|
||||
bt_info
|
||||
bt_warn
|
||||
@@ -1428,6 +1430,8 @@
|
||||
_raw_write_lock
|
||||
_raw_write_unlock
|
||||
set_capacity
|
||||
sg_copy_from_buffer
|
||||
sg_copy_to_buffer
|
||||
sock_efree
|
||||
sysfs_streq
|
||||
tty_hangup
|
||||
|
||||
@@ -435,7 +435,7 @@
|
||||
|
||||
/* Direct-mapped development chip ROM */
|
||||
pb1176_rom@10200000 {
|
||||
compatible = "direct-mapped";
|
||||
compatible = "mtd-rom";
|
||||
reg = <0x10200000 0x4000>;
|
||||
bank-width = <1>;
|
||||
};
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
wlan {
|
||||
label = "bcm53xx:blue:wlan";
|
||||
gpios = <&chipcommon 10 GPIO_ACTIVE_LOW>;
|
||||
linux,default-trigger = "default-off";
|
||||
};
|
||||
|
||||
system {
|
||||
|
||||
@@ -26,7 +26,6 @@
|
||||
5ghz {
|
||||
label = "bcm53xx:blue:5ghz";
|
||||
gpios = <&chipcommon 11 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "default-off";
|
||||
};
|
||||
|
||||
system {
|
||||
@@ -42,7 +41,6 @@
|
||||
2ghz {
|
||||
label = "bcm53xx:blue:2ghz";
|
||||
gpios = <&pcie0_chipcommon 3 GPIO_ACTIVE_HIGH>;
|
||||
linux,default-trigger = "default-off";
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@@ -159,8 +159,6 @@
|
||||
};
|
||||
|
||||
ohci: usb@d000 {
|
||||
#usb-cells = <0>;
|
||||
|
||||
compatible = "generic-ohci";
|
||||
reg = <0xd000 0x1000>;
|
||||
interrupt-parent = <&gic>;
|
||||
@@ -183,6 +181,24 @@
|
||||
|
||||
gmac0: ethernet@5000 {
|
||||
reg = <0x5000 0x1000>;
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
switch: switch@1e {
|
||||
compatible = "brcm,bcm53125";
|
||||
reg = <0x1e>;
|
||||
|
||||
status = "disabled";
|
||||
|
||||
/* ports are defined in board DTS */
|
||||
ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
gmac1: ethernet@b000 {
|
||||
|
||||
@@ -105,8 +105,6 @@
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_enet>;
|
||||
phy-mode = "rgmii-id";
|
||||
phy-reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
|
||||
phy-reset-duration = <20>;
|
||||
phy-supply = <&sw2_reg>;
|
||||
status = "okay";
|
||||
|
||||
@@ -119,17 +117,10 @@
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy_port2: phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
phy_port3: phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
|
||||
switch@10 {
|
||||
compatible = "qca,qca8334";
|
||||
reg = <10>;
|
||||
reg = <0x10>;
|
||||
reset-gpios = <&gpio1 25 GPIO_ACTIVE_LOW>;
|
||||
|
||||
switch_ports: ports {
|
||||
#address-cells = <1>;
|
||||
@@ -150,15 +141,30 @@
|
||||
eth2: port@2 {
|
||||
reg = <2>;
|
||||
label = "eth2";
|
||||
phy-mode = "internal";
|
||||
phy-handle = <&phy_port2>;
|
||||
};
|
||||
|
||||
eth1: port@3 {
|
||||
reg = <3>;
|
||||
label = "eth1";
|
||||
phy-mode = "internal";
|
||||
phy-handle = <&phy_port3>;
|
||||
};
|
||||
};
|
||||
|
||||
mdio {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
phy_port2: ethernet-phy@1 {
|
||||
reg = <1>;
|
||||
};
|
||||
|
||||
phy_port3: ethernet-phy@2 {
|
||||
reg = <2>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
|
||||
#include "sha256_glue.h"
|
||||
|
||||
asmlinkage void sha256_block_data_order(u32 *digest, const void *data,
|
||||
unsigned int num_blks);
|
||||
asmlinkage void sha256_block_data_order(struct sha256_state *state,
|
||||
const u8 *data, int num_blks);
|
||||
|
||||
int crypto_sha256_arm_update(struct shash_desc *desc, const u8 *data,
|
||||
unsigned int len)
|
||||
@@ -33,23 +33,20 @@ int crypto_sha256_arm_update(struct shash_desc *desc, const u8 *data,
|
||||
/* make sure casting to sha256_block_fn() is safe */
|
||||
BUILD_BUG_ON(offsetof(struct sha256_state, state) != 0);
|
||||
|
||||
return sha256_base_do_update(desc, data, len,
|
||||
(sha256_block_fn *)sha256_block_data_order);
|
||||
return sha256_base_do_update(desc, data, len, sha256_block_data_order);
|
||||
}
|
||||
EXPORT_SYMBOL(crypto_sha256_arm_update);
|
||||
|
||||
static int crypto_sha256_arm_final(struct shash_desc *desc, u8 *out)
|
||||
{
|
||||
sha256_base_do_finalize(desc,
|
||||
(sha256_block_fn *)sha256_block_data_order);
|
||||
sha256_base_do_finalize(desc, sha256_block_data_order);
|
||||
return sha256_base_finish(desc, out);
|
||||
}
|
||||
|
||||
int crypto_sha256_arm_finup(struct shash_desc *desc, const u8 *data,
|
||||
unsigned int len, u8 *out)
|
||||
{
|
||||
sha256_base_do_update(desc, data, len,
|
||||
(sha256_block_fn *)sha256_block_data_order);
|
||||
sha256_base_do_update(desc, data, len, sha256_block_data_order);
|
||||
return crypto_sha256_arm_final(desc, out);
|
||||
}
|
||||
EXPORT_SYMBOL(crypto_sha256_arm_finup);
|
||||
|
||||
@@ -25,27 +25,25 @@ MODULE_ALIAS_CRYPTO("sha512");
|
||||
MODULE_ALIAS_CRYPTO("sha384-arm");
|
||||
MODULE_ALIAS_CRYPTO("sha512-arm");
|
||||
|
||||
asmlinkage void sha512_block_data_order(u64 *state, u8 const *src, int blocks);
|
||||
asmlinkage void sha512_block_data_order(struct sha512_state *state,
|
||||
u8 const *src, int blocks);
|
||||
|
||||
int sha512_arm_update(struct shash_desc *desc, const u8 *data,
|
||||
unsigned int len)
|
||||
{
|
||||
return sha512_base_do_update(desc, data, len,
|
||||
(sha512_block_fn *)sha512_block_data_order);
|
||||
return sha512_base_do_update(desc, data, len, sha512_block_data_order);
|
||||
}
|
||||
|
||||
static int sha512_arm_final(struct shash_desc *desc, u8 *out)
|
||||
{
|
||||
sha512_base_do_finalize(desc,
|
||||
(sha512_block_fn *)sha512_block_data_order);
|
||||
sha512_base_do_finalize(desc, sha512_block_data_order);
|
||||
return sha512_base_finish(desc, out);
|
||||
}
|
||||
|
||||
int sha512_arm_finup(struct shash_desc *desc, const u8 *data,
|
||||
unsigned int len, u8 *out)
|
||||
{
|
||||
sha512_base_do_update(desc, data, len,
|
||||
(sha512_block_fn *)sha512_block_data_order);
|
||||
sha512_base_do_update(desc, data, len, sha512_block_data_order);
|
||||
return sha512_arm_final(desc, out);
|
||||
}
|
||||
|
||||
|
||||
@@ -337,6 +337,7 @@ static struct gpiod_lookup_table ep93xx_i2c_gpiod_table = {
|
||||
GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
|
||||
GPIO_LOOKUP_IDX("G", 0, NULL, 1,
|
||||
GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN),
|
||||
{ }
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -180,9 +180,6 @@
|
||||
brcm,num-gphy = <5>;
|
||||
brcm,num-rgmii-ports = <2>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
ports: ports {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
@@ -191,8 +191,10 @@
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-names = "default", "state_100mhz", "state_200mhz";
|
||||
pinctrl-0 = <&pinctrl_usdhc2>;
|
||||
pinctrl-1 = <&pinctrl_usdhc2_100mhz>;
|
||||
pinctrl-2 = <&pinctrl_usdhc2_200mhz>;
|
||||
vmmc-supply = <®_vdd_3v3>;
|
||||
vqmmc-supply = <®_nvcc_sd>;
|
||||
cd-gpios = <&gpio2 12 GPIO_ACTIVE_LOW>;
|
||||
@@ -275,8 +277,8 @@
|
||||
|
||||
pinctrl_i2c4: i2c4grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_I2C4_SCL_I2C4_SCL 0x400001c3
|
||||
MX8MM_IOMUXC_I2C4_SDA_I2C4_SDA 0x400001c3
|
||||
MX8MM_IOMUXC_I2C4_SCL_I2C4_SCL 0x40000083
|
||||
MX8MM_IOMUXC_I2C4_SDA_I2C4_SDA 0x40000083
|
||||
>;
|
||||
};
|
||||
|
||||
@@ -288,19 +290,19 @@
|
||||
|
||||
pinctrl_uart1: uart1grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_SAI2_RXC_UART1_DCE_RX 0x140
|
||||
MX8MM_IOMUXC_SAI2_RXFS_UART1_DCE_TX 0x140
|
||||
MX8MM_IOMUXC_SAI2_RXD0_UART1_DCE_RTS_B 0x140
|
||||
MX8MM_IOMUXC_SAI2_TXFS_UART1_DCE_CTS_B 0x140
|
||||
MX8MM_IOMUXC_SAI2_RXC_UART1_DCE_RX 0x0
|
||||
MX8MM_IOMUXC_SAI2_RXFS_UART1_DCE_TX 0x0
|
||||
MX8MM_IOMUXC_SAI2_RXD0_UART1_DCE_RTS_B 0x0
|
||||
MX8MM_IOMUXC_SAI2_TXFS_UART1_DCE_CTS_B 0x0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_uart2: uart2grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_SAI3_TXFS_UART2_DCE_RX 0x140
|
||||
MX8MM_IOMUXC_SAI3_TXC_UART2_DCE_TX 0x140
|
||||
MX8MM_IOMUXC_SAI3_RXD_UART2_DCE_RTS_B 0x140
|
||||
MX8MM_IOMUXC_SAI3_RXC_UART2_DCE_CTS_B 0x140
|
||||
MX8MM_IOMUXC_SAI3_TXFS_UART2_DCE_RX 0x0
|
||||
MX8MM_IOMUXC_SAI3_TXC_UART2_DCE_TX 0x0
|
||||
MX8MM_IOMUXC_SAI3_RXD_UART2_DCE_RTS_B 0x0
|
||||
MX8MM_IOMUXC_SAI3_RXC_UART2_DCE_CTS_B 0x0
|
||||
>;
|
||||
};
|
||||
|
||||
@@ -312,13 +314,40 @@
|
||||
|
||||
pinctrl_usdhc2: usdhc2grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK 0x190
|
||||
MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK 0x90
|
||||
MX8MM_IOMUXC_SD2_CMD_USDHC2_CMD 0x1d0
|
||||
MX8MM_IOMUXC_SD2_DATA0_USDHC2_DATA0 0x1d0
|
||||
MX8MM_IOMUXC_SD2_DATA1_USDHC2_DATA1 0x1d0
|
||||
MX8MM_IOMUXC_SD2_DATA2_USDHC2_DATA2 0x1d0
|
||||
MX8MM_IOMUXC_SD2_DATA3_USDHC2_DATA3 0x1d0
|
||||
MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x019
|
||||
MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x19
|
||||
MX8MM_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xd0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_100mhz: usdhc2-100mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK 0x94
|
||||
MX8MM_IOMUXC_SD2_CMD_USDHC2_CMD 0x1d4
|
||||
MX8MM_IOMUXC_SD2_DATA0_USDHC2_DATA0 0x1d4
|
||||
MX8MM_IOMUXC_SD2_DATA1_USDHC2_DATA1 0x1d4
|
||||
MX8MM_IOMUXC_SD2_DATA2_USDHC2_DATA2 0x1d4
|
||||
MX8MM_IOMUXC_SD2_DATA3_USDHC2_DATA3 0x1d4
|
||||
MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x19
|
||||
MX8MM_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xd0
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usdhc2_200mhz: usdhc2-200mhzgrp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_SD2_CLK_USDHC2_CLK 0x96
|
||||
MX8MM_IOMUXC_SD2_CMD_USDHC2_CMD 0x1d6
|
||||
MX8MM_IOMUXC_SD2_DATA0_USDHC2_DATA0 0x1d6
|
||||
MX8MM_IOMUXC_SD2_DATA1_USDHC2_DATA1 0x1d6
|
||||
MX8MM_IOMUXC_SD2_DATA2_USDHC2_DATA2 0x1d6
|
||||
MX8MM_IOMUXC_SD2_DATA3_USDHC2_DATA3 0x1d6
|
||||
MX8MM_IOMUXC_SD2_CD_B_GPIO2_IO12 0x19
|
||||
MX8MM_IOMUXC_GPIO1_IO04_USDHC2_VSELECT 0xd0
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -220,8 +220,8 @@
|
||||
|
||||
pinctrl_i2c1: i2c1grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_I2C1_SCL_I2C1_SCL 0x400001c3
|
||||
MX8MM_IOMUXC_I2C1_SDA_I2C1_SDA 0x400001c3
|
||||
MX8MM_IOMUXC_I2C1_SCL_I2C1_SCL 0x40000083
|
||||
MX8MM_IOMUXC_I2C1_SDA_I2C1_SDA 0x40000083
|
||||
>;
|
||||
};
|
||||
|
||||
|
||||
@@ -40,17 +40,6 @@
|
||||
gpios = <&gpio1 15 GPIO_ACTIVE_HIGH>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
reg_usb_otg1_vbus: regulator-usb-otg1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_reg_usb1_en>;
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "usb_otg1_vbus";
|
||||
gpio = <&gpio1 10 GPIO_ACTIVE_HIGH>;
|
||||
enable-active-high;
|
||||
regulator-min-microvolt = <5000000>;
|
||||
regulator-max-microvolt = <5000000>;
|
||||
};
|
||||
};
|
||||
|
||||
/* off-board header */
|
||||
@@ -102,9 +91,10 @@
|
||||
};
|
||||
|
||||
&usbotg1 {
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&pinctrl_usbotg1>;
|
||||
dr_mode = "otg";
|
||||
over-current-active-low;
|
||||
vbus-supply = <®_usb_otg1_vbus>;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -156,14 +146,6 @@
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_reg_usb1_en: regusb1grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_GPIO1_IO10_GPIO1_IO10 0x41
|
||||
MX8MM_IOMUXC_GPIO1_IO12_GPIO1_IO12 0x141
|
||||
MX8MM_IOMUXC_GPIO1_IO13_USB1_OTG_OC 0x41
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_spi2: spi2grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_ECSPI2_SCLK_ECSPI2_SCLK 0xd6
|
||||
@@ -186,4 +168,11 @@
|
||||
MX8MM_IOMUXC_UART3_TXD_UART3_DCE_TX 0x140
|
||||
>;
|
||||
};
|
||||
|
||||
pinctrl_usbotg1: usbotg1grp {
|
||||
fsl,pins = <
|
||||
MX8MM_IOMUXC_GPIO1_IO12_GPIO1_IO12 0x141
|
||||
MX8MM_IOMUXC_GPIO1_IO13_USB1_OTG_OC 0x41
|
||||
>;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -414,14 +414,14 @@
|
||||
crypto: crypto@90000 {
|
||||
compatible = "inside-secure,safexcel-eip97ies";
|
||||
reg = <0x90000 0x20000>;
|
||||
interrupts = <GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mem", "ring0", "ring1",
|
||||
"ring2", "ring3", "eip";
|
||||
<GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 19 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "ring0", "ring1", "ring2",
|
||||
"ring3", "eip", "mem";
|
||||
clocks = <&nb_periph_clk 15>;
|
||||
};
|
||||
|
||||
|
||||
@@ -506,14 +506,14 @@
|
||||
CP11X_LABEL(crypto): crypto@800000 {
|
||||
compatible = "inside-secure,safexcel-eip197b";
|
||||
reg = <0x800000 0x200000>;
|
||||
interrupts = <87 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<88 IRQ_TYPE_LEVEL_HIGH>,
|
||||
interrupts = <88 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<89 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<90 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<91 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<92 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "mem", "ring0", "ring1",
|
||||
"ring2", "ring3", "eip";
|
||||
<92 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<87 IRQ_TYPE_LEVEL_HIGH>;
|
||||
interrupt-names = "ring0", "ring1", "ring2", "ring3",
|
||||
"eip", "mem";
|
||||
clock-names = "core", "reg";
|
||||
clocks = <&CP11X_LABEL(clk) 1 26>,
|
||||
<&CP11X_LABEL(clk) 1 17>;
|
||||
|
||||
@@ -71,6 +71,7 @@
|
||||
|
||||
memory@40000000 {
|
||||
reg = <0 0x40000000 0 0x40000000>;
|
||||
device_type = "memory";
|
||||
};
|
||||
|
||||
reg_1p8v: regulator-1p8v {
|
||||
|
||||
@@ -57,6 +57,7 @@
|
||||
|
||||
memory@40000000 {
|
||||
reg = <0 0x40000000 0 0x20000000>;
|
||||
device_type = "memory";
|
||||
};
|
||||
|
||||
reg_1p8v: regulator-1p8v {
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
*/
|
||||
|
||||
#include "mt8183-kukui.dtsi"
|
||||
/* Must come after mt8183-kukui.dtsi to modify cros_ec */
|
||||
#include <arm/cros-ec-keyboard.dtsi>
|
||||
|
||||
/ {
|
||||
panel: panel {
|
||||
|
||||
@@ -372,6 +372,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
&cros_ec {
|
||||
cbas {
|
||||
compatible = "google,cros-cbas";
|
||||
};
|
||||
|
||||
keyboard-controller {
|
||||
compatible = "google,cros-ec-keyb-switches";
|
||||
};
|
||||
};
|
||||
|
||||
&qca_wifi {
|
||||
qcom,ath10k-calibration-variant = "GO_KAKADU";
|
||||
};
|
||||
|
||||
@@ -338,6 +338,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
&cros_ec {
|
||||
cbas {
|
||||
compatible = "google,cros-cbas";
|
||||
};
|
||||
|
||||
keyboard-controller {
|
||||
compatible = "google,cros-ec-keyb-switches";
|
||||
};
|
||||
};
|
||||
|
||||
&qca_wifi {
|
||||
qcom,ath10k-calibration-variant = "GO_KODAMA";
|
||||
};
|
||||
|
||||
@@ -342,6 +342,16 @@
|
||||
};
|
||||
};
|
||||
|
||||
&cros_ec {
|
||||
cbas {
|
||||
compatible = "google,cros-cbas";
|
||||
};
|
||||
|
||||
keyboard-controller {
|
||||
compatible = "google,cros-ec-keyb-switches";
|
||||
};
|
||||
};
|
||||
|
||||
&qca_wifi {
|
||||
qcom,ath10k-calibration-variant = "LE_Krane";
|
||||
};
|
||||
|
||||
@@ -828,8 +828,18 @@
|
||||
google,usb-port-id = <0>;
|
||||
};
|
||||
|
||||
cbas {
|
||||
compatible = "google,cros-cbas";
|
||||
typec {
|
||||
compatible = "google,cros-ec-typec";
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
usb_c0: connector@0 {
|
||||
compatible = "usb-c-connector";
|
||||
reg = <0>;
|
||||
power-role = "dual";
|
||||
data-role = "host";
|
||||
try-power-role = "sink";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
@@ -917,5 +927,4 @@
|
||||
};
|
||||
};
|
||||
|
||||
#include <arm/cros-ec-keyboard.dtsi>
|
||||
#include <arm/cros-ec-sbs.dtsi>
|
||||
|
||||
@@ -583,8 +583,8 @@
|
||||
|
||||
avb0: ethernet@e6800000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
reg = <0 0xe6800000 0 0x800>;
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6800000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 256 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 257 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 258 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -631,8 +631,8 @@
|
||||
|
||||
avb1: ethernet@e6810000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
reg = <0 0xe6810000 0 0x800>;
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6810000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 281 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 282 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 283 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -679,7 +679,7 @@
|
||||
|
||||
avb2: ethernet@e6820000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6820000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 306 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -727,7 +727,7 @@
|
||||
|
||||
avb3: ethernet@e6830000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6830000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 331 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 332 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -775,7 +775,7 @@
|
||||
|
||||
avb4: ethernet@e6840000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6840000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 356 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 357 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -823,7 +823,7 @@
|
||||
|
||||
avb5: ethernet@e6850000 {
|
||||
compatible = "renesas,etheravb-r8a779a0",
|
||||
"renesas,etheravb-rcar-gen3";
|
||||
"renesas,etheravb-rcar-gen4";
|
||||
reg = <0 0xe6850000 0 0x1000>;
|
||||
interrupts = <GIC_SPI 381 IRQ_TYPE_LEVEL_HIGH>,
|
||||
<GIC_SPI 382 IRQ_TYPE_LEVEL_HIGH>,
|
||||
@@ -935,7 +935,7 @@
|
||||
|
||||
msiof0: spi@e6e90000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6e90000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 245 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 618>;
|
||||
@@ -950,7 +950,7 @@
|
||||
|
||||
msiof1: spi@e6ea0000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6ea0000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 246 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 619>;
|
||||
@@ -965,7 +965,7 @@
|
||||
|
||||
msiof2: spi@e6c00000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6c00000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 247 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 620>;
|
||||
@@ -980,7 +980,7 @@
|
||||
|
||||
msiof3: spi@e6c10000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6c10000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 248 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 621>;
|
||||
@@ -995,7 +995,7 @@
|
||||
|
||||
msiof4: spi@e6c20000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6c20000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 249 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 622>;
|
||||
@@ -1010,7 +1010,7 @@
|
||||
|
||||
msiof5: spi@e6c28000 {
|
||||
compatible = "renesas,msiof-r8a779a0",
|
||||
"renesas,rcar-gen3-msiof";
|
||||
"renesas,rcar-gen4-msiof";
|
||||
reg = <0 0xe6c28000 0 0x0064>;
|
||||
interrupts = <GIC_SPI 250 IRQ_TYPE_LEVEL_HIGH>;
|
||||
clocks = <&cpg CPG_MOD 623>;
|
||||
|
||||
@@ -585,6 +585,7 @@
|
||||
clock-names = "spiclk", "apb_pclk";
|
||||
dmas = <&dmac 12>, <&dmac 13>;
|
||||
dma-names = "tx", "rx";
|
||||
num-cs = <2>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi0_clk &spi0_csn &spi0_miso &spi0_mosi>;
|
||||
#address-cells = <1>;
|
||||
@@ -600,6 +601,7 @@
|
||||
clock-names = "spiclk", "apb_pclk";
|
||||
dmas = <&dmac 14>, <&dmac 15>;
|
||||
dma-names = "tx", "rx";
|
||||
num-cs = <2>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&spi1_clk &spi1_csn0 &spi1_csn1 &spi1_miso &spi1_mosi>;
|
||||
#address-cells = <1>;
|
||||
|
||||
@@ -36,6 +36,29 @@
|
||||
reset-gpios = <&gpio0 RK_PB2 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
|
||||
sound {
|
||||
compatible = "audio-graph-card";
|
||||
label = "Analog";
|
||||
dais = <&i2s0_p0>;
|
||||
};
|
||||
|
||||
sound-dit {
|
||||
compatible = "audio-graph-card";
|
||||
label = "SPDIF";
|
||||
dais = <&spdif_p0>;
|
||||
};
|
||||
|
||||
spdif-dit {
|
||||
compatible = "linux,spdif-dit";
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
port {
|
||||
dit_p0_0: endpoint {
|
||||
remote-endpoint = <&spdif_p0_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
vcc12v_dcin: dc-12v {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc12v_dcin";
|
||||
@@ -98,24 +121,25 @@
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
vcc5v0_typec: vcc5v0-typec-regulator {
|
||||
vbus_typec: vbus-typec-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
enable-active-high;
|
||||
gpio = <&gpio1 RK_PA3 GPIO_ACTIVE_HIGH>;
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&vcc5v0_typec_en>;
|
||||
regulator-name = "vcc5v0_typec";
|
||||
regulator-name = "vbus_typec";
|
||||
regulator-always-on;
|
||||
vin-supply = <&vcc5v0_sys>;
|
||||
};
|
||||
|
||||
vcc_lan: vcc3v3-phy-regulator {
|
||||
vcc3v3_lan: vcc3v3-lan-regulator {
|
||||
compatible = "regulator-fixed";
|
||||
regulator-name = "vcc_lan";
|
||||
regulator-name = "vcc3v3_lan";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <3300000>;
|
||||
regulator-max-microvolt = <3300000>;
|
||||
vin-supply = <&vcc3v3_sys>;
|
||||
};
|
||||
|
||||
vdd_log: vdd-log {
|
||||
@@ -162,7 +186,7 @@
|
||||
assigned-clocks = <&cru SCLK_RMII_SRC>;
|
||||
assigned-clock-parents = <&clkin_gmac>;
|
||||
clock_in_out = "input";
|
||||
phy-supply = <&vcc_lan>;
|
||||
phy-supply = <&vcc3v3_lan>;
|
||||
phy-mode = "rgmii";
|
||||
pinctrl-names = "default";
|
||||
pinctrl-0 = <&rgmii_pins>;
|
||||
@@ -267,8 +291,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
vcc1v8_codec: LDO_REG1 {
|
||||
regulator-name = "vcc1v8_codec";
|
||||
vcca1v8_codec: LDO_REG1 {
|
||||
regulator-name = "vcca1v8_codec";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
@@ -278,8 +302,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
vcc1v8_hdmi: LDO_REG2 {
|
||||
regulator-name = "vcc1v8_hdmi";
|
||||
vcca1v8_hdmi: LDO_REG2 {
|
||||
regulator-name = "vcca1v8_hdmi";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <1800000>;
|
||||
@@ -336,8 +360,8 @@
|
||||
};
|
||||
};
|
||||
|
||||
vcc0v9_hdmi: LDO_REG7 {
|
||||
regulator-name = "vcc0v9_hdmi";
|
||||
vcca0v9_hdmi: LDO_REG7 {
|
||||
regulator-name = "vcca0v9_hdmi";
|
||||
regulator-always-on;
|
||||
regulator-boot-on;
|
||||
regulator-min-microvolt = <900000>;
|
||||
@@ -422,6 +446,20 @@
|
||||
i2c-scl-rising-time-ns = <300>;
|
||||
i2c-scl-falling-time-ns = <15>;
|
||||
status = "okay";
|
||||
|
||||
es8316: codec@11 {
|
||||
compatible = "everest,es8316";
|
||||
reg = <0x11>;
|
||||
clocks = <&cru SCLK_I2S_8CH_OUT>;
|
||||
clock-names = "mclk";
|
||||
#sound-dai-cells = <0>;
|
||||
|
||||
port {
|
||||
es8316_p0_0: endpoint {
|
||||
remote-endpoint = <&i2s0_p0_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2c3 {
|
||||
@@ -441,6 +479,14 @@
|
||||
rockchip,capture-channels = <2>;
|
||||
rockchip,playback-channels = <2>;
|
||||
status = "okay";
|
||||
|
||||
i2s0_p0: port {
|
||||
i2s0_p0_0: endpoint {
|
||||
dai-format = "i2s";
|
||||
mclk-fs = <256>;
|
||||
remote-endpoint = <&es8316_p0_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&i2s1 {
|
||||
@@ -456,7 +502,7 @@
|
||||
status = "okay";
|
||||
|
||||
bt656-supply = <&vcc_3v0>;
|
||||
audio-supply = <&vcc1v8_codec>;
|
||||
audio-supply = <&vcca1v8_codec>;
|
||||
sdmmc-supply = <&vcc_sdio>;
|
||||
gpio1830-supply = <&vcc_3v0>;
|
||||
};
|
||||
@@ -602,6 +648,15 @@
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&spdif {
|
||||
|
||||
spdif_p0: port {
|
||||
spdif_p0_0: endpoint {
|
||||
remote-endpoint = <&dit_p0_0>;
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&tcphy0 {
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
@@ -8,16 +8,11 @@
|
||||
#define __ASM_EXCEPTION_H
|
||||
|
||||
#include <asm/esr.h>
|
||||
#include <asm/kprobes.h>
|
||||
#include <asm/ptrace.h>
|
||||
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
#define __exception_irq_entry __irq_entry
|
||||
#else
|
||||
#define __exception_irq_entry __kprobes
|
||||
#endif
|
||||
|
||||
static inline unsigned long disr_to_esr(u64 disr)
|
||||
{
|
||||
|
||||
@@ -462,6 +462,9 @@ static int its_sync_lpi_pending_table(struct kvm_vcpu *vcpu)
|
||||
}
|
||||
|
||||
irq = vgic_get_irq(vcpu->kvm, NULL, intids[i]);
|
||||
if (!irq)
|
||||
continue;
|
||||
|
||||
raw_spin_lock_irqsave(&irq->irq_lock, flags);
|
||||
irq->pending_latch = pendmask & (1U << bit_nr);
|
||||
vgic_queue_irq_unlock(vcpu->kvm, irq, flags);
|
||||
@@ -1427,6 +1430,8 @@ static int vgic_its_cmd_handle_movall(struct kvm *kvm, struct vgic_its *its,
|
||||
|
||||
for (i = 0; i < irq_count; i++) {
|
||||
irq = vgic_get_irq(kvm, NULL, intids[i]);
|
||||
if (!irq)
|
||||
continue;
|
||||
|
||||
update_affinity(irq, vcpu2);
|
||||
|
||||
|
||||
@@ -440,7 +440,7 @@ static phys_addr_t pgd_pgtable_alloc(int shift)
|
||||
static void __init create_mapping_noalloc(phys_addr_t phys, unsigned long virt,
|
||||
phys_addr_t size, pgprot_t prot)
|
||||
{
|
||||
if ((virt >= PAGE_END) && (virt < VMALLOC_START)) {
|
||||
if (virt < PAGE_OFFSET) {
|
||||
pr_warn("BUG: not creating mapping for %pa at 0x%016lx - outside kernel range\n",
|
||||
&phys, virt);
|
||||
return;
|
||||
@@ -467,7 +467,7 @@ void __init create_pgd_mapping(struct mm_struct *mm, phys_addr_t phys,
|
||||
static void update_mapping_prot(phys_addr_t phys, unsigned long virt,
|
||||
phys_addr_t size, pgprot_t prot)
|
||||
{
|
||||
if ((virt >= PAGE_END) && (virt < VMALLOC_START)) {
|
||||
if (virt < PAGE_OFFSET) {
|
||||
pr_warn("BUG: not updating mapping for %pa at 0x%016lx - outside kernel range\n",
|
||||
&phys, virt);
|
||||
return;
|
||||
|
||||
@@ -60,6 +60,7 @@ static inline void instruction_pointer_set(struct pt_regs *regs,
|
||||
unsigned long val)
|
||||
{
|
||||
regs->cp0_epc = val;
|
||||
regs->cp0_cause &= ~CAUSEF_BD;
|
||||
}
|
||||
|
||||
/* Query offset/name of register from its name/offset */
|
||||
|
||||
@@ -102,7 +102,6 @@ struct vpe_control {
|
||||
struct list_head tc_list; /* Thread contexts */
|
||||
};
|
||||
|
||||
extern unsigned long physical_memsize;
|
||||
extern struct vpe_control vpecontrol;
|
||||
extern const struct file_operations vpe_fops;
|
||||
|
||||
|
||||
@@ -424,9 +424,11 @@ static void cps_shutdown_this_cpu(enum cpu_death death)
|
||||
wmb();
|
||||
}
|
||||
} else {
|
||||
pr_debug("Gating power to core %d\n", core);
|
||||
/* Power down the core */
|
||||
cps_pm_enter_state(CPS_PM_POWER_GATED);
|
||||
if (IS_ENABLED(CONFIG_HOTPLUG_CPU)) {
|
||||
pr_debug("Gating power to core %d\n", core);
|
||||
/* Power down the core */
|
||||
cps_pm_enter_state(CPS_PM_POWER_GATED);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2001,7 +2001,13 @@ unsigned long vi_handlers[64];
|
||||
|
||||
void reserve_exception_space(phys_addr_t addr, unsigned long size)
|
||||
{
|
||||
memblock_reserve(addr, size);
|
||||
/*
|
||||
* reserve exception space on CPUs other than CPU0
|
||||
* is too late, since memblock is unavailable when APs
|
||||
* up
|
||||
*/
|
||||
if (smp_processor_id() == 0)
|
||||
memblock_reserve(addr, size);
|
||||
}
|
||||
|
||||
void __init *set_except_vector(int n, void *addr)
|
||||
|
||||
@@ -92,12 +92,11 @@ int vpe_run(struct vpe *v)
|
||||
write_tc_c0_tchalt(read_tc_c0_tchalt() & ~TCHALT_H);
|
||||
|
||||
/*
|
||||
* The sde-kit passes 'memsize' to __start in $a3, so set something
|
||||
* here... Or set $a3 to zero and define DFLT_STACK_SIZE and
|
||||
* DFLT_HEAP_SIZE when you compile your program
|
||||
* We don't pass the memsize here, so VPE programs need to be
|
||||
* compiled with DFLT_STACK_SIZE and DFLT_HEAP_SIZE defined.
|
||||
*/
|
||||
mttgpr(7, 0);
|
||||
mttgpr(6, v->ntcs);
|
||||
mttgpr(7, physical_memsize);
|
||||
|
||||
/* set up VPE1 */
|
||||
/*
|
||||
|
||||
@@ -22,12 +22,6 @@
|
||||
DEFINE_SPINLOCK(ebu_lock);
|
||||
EXPORT_SYMBOL_GPL(ebu_lock);
|
||||
|
||||
/*
|
||||
* This is needed by the VPE loader code, just set it to 0 and assume
|
||||
* that the firmware hardcodes this value to something useful.
|
||||
*/
|
||||
unsigned long physical_memsize = 0L;
|
||||
|
||||
/*
|
||||
* this struct is filled by the soc specific detection code and holds
|
||||
* information about the specific soc type, revision and name
|
||||
|
||||
@@ -81,7 +81,7 @@ void notrace __hot ftrace_function_trampoline(unsigned long parent,
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_FUNCTION_GRAPH_TRACER
|
||||
#if defined(CONFIG_DYNAMIC_FTRACE) && defined(CONFIG_FUNCTION_GRAPH_TRACER)
|
||||
int ftrace_enable_ftrace_graph_caller(void)
|
||||
{
|
||||
return 0;
|
||||
|
||||
@@ -7,14 +7,14 @@
|
||||
#ifdef CONFIG_HAVE_ARCH_HUGE_VMAP
|
||||
|
||||
#define arch_vmap_pud_supported arch_vmap_pud_supported
|
||||
static inline bool arch_vmap_pud_supported(pgprot_t prot)
|
||||
static __always_inline bool arch_vmap_pud_supported(pgprot_t prot)
|
||||
{
|
||||
/* HPT does not cope with large pages in the vmalloc area */
|
||||
return radix_enabled();
|
||||
}
|
||||
|
||||
#define arch_vmap_pmd_supported arch_vmap_pmd_supported
|
||||
static inline bool arch_vmap_pmd_supported(pgprot_t prot)
|
||||
static __always_inline bool arch_vmap_pmd_supported(pgprot_t prot)
|
||||
{
|
||||
return radix_enabled();
|
||||
}
|
||||
|
||||
@@ -1054,45 +1054,46 @@ void eeh_handle_normal_event(struct eeh_pe *pe)
|
||||
}
|
||||
|
||||
pr_info("EEH: Recovery successful.\n");
|
||||
} else {
|
||||
/*
|
||||
* About 90% of all real-life EEH failures in the field
|
||||
* are due to poorly seated PCI cards. Only 10% or so are
|
||||
* due to actual, failed cards.
|
||||
*/
|
||||
pr_err("EEH: Unable to recover from failure from PHB#%x-PE#%x.\n"
|
||||
"Please try reseating or replacing it\n",
|
||||
pe->phb->global_number, pe->addr);
|
||||
goto out;
|
||||
}
|
||||
|
||||
eeh_slot_error_detail(pe, EEH_LOG_PERM);
|
||||
/*
|
||||
* About 90% of all real-life EEH failures in the field
|
||||
* are due to poorly seated PCI cards. Only 10% or so are
|
||||
* due to actual, failed cards.
|
||||
*/
|
||||
pr_err("EEH: Unable to recover from failure from PHB#%x-PE#%x.\n"
|
||||
"Please try reseating or replacing it\n",
|
||||
pe->phb->global_number, pe->addr);
|
||||
|
||||
/* Notify all devices that they're about to go down. */
|
||||
eeh_set_channel_state(pe, pci_channel_io_perm_failure);
|
||||
eeh_set_irq_state(pe, false);
|
||||
eeh_pe_report("error_detected(permanent failure)", pe,
|
||||
eeh_report_failure, NULL);
|
||||
eeh_slot_error_detail(pe, EEH_LOG_PERM);
|
||||
|
||||
/* Mark the PE to be removed permanently */
|
||||
eeh_pe_state_mark(pe, EEH_PE_REMOVED);
|
||||
/* Notify all devices that they're about to go down. */
|
||||
eeh_set_irq_state(pe, false);
|
||||
eeh_pe_report("error_detected(permanent failure)", pe,
|
||||
eeh_report_failure, NULL);
|
||||
eeh_set_channel_state(pe, pci_channel_io_perm_failure);
|
||||
|
||||
/*
|
||||
* Shut down the device drivers for good. We mark
|
||||
* all removed devices correctly to avoid access
|
||||
* the their PCI config any more.
|
||||
*/
|
||||
if (pe->type & EEH_PE_VF) {
|
||||
eeh_pe_dev_traverse(pe, eeh_rmv_device, NULL);
|
||||
eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED);
|
||||
} else {
|
||||
eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true);
|
||||
eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED);
|
||||
/* Mark the PE to be removed permanently */
|
||||
eeh_pe_state_mark(pe, EEH_PE_REMOVED);
|
||||
|
||||
pci_lock_rescan_remove();
|
||||
pci_hp_remove_devices(bus);
|
||||
pci_unlock_rescan_remove();
|
||||
/* The passed PE should no longer be used */
|
||||
return;
|
||||
}
|
||||
/*
|
||||
* Shut down the device drivers for good. We mark
|
||||
* all removed devices correctly to avoid access
|
||||
* the their PCI config any more.
|
||||
*/
|
||||
if (pe->type & EEH_PE_VF) {
|
||||
eeh_pe_dev_traverse(pe, eeh_rmv_device, NULL);
|
||||
eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED);
|
||||
} else {
|
||||
eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true);
|
||||
eeh_pe_dev_mode_mark(pe, EEH_DEV_REMOVED);
|
||||
|
||||
pci_lock_rescan_remove();
|
||||
pci_hp_remove_devices(bus);
|
||||
pci_unlock_rescan_remove();
|
||||
/* The passed PE should no longer be used */
|
||||
return;
|
||||
}
|
||||
|
||||
out:
|
||||
@@ -1188,10 +1189,10 @@ void eeh_handle_special_event(void)
|
||||
|
||||
/* Notify all devices to be down */
|
||||
eeh_pe_state_clear(pe, EEH_PE_PRI_BUS, true);
|
||||
eeh_set_channel_state(pe, pci_channel_io_perm_failure);
|
||||
eeh_pe_report(
|
||||
"error_detected(permanent failure)", pe,
|
||||
eeh_report_failure, NULL);
|
||||
eeh_set_channel_state(pe, pci_channel_io_perm_failure);
|
||||
|
||||
pci_lock_rescan_remove();
|
||||
list_for_each_entry(hose, &hose_list, list_node) {
|
||||
|
||||
@@ -68,10 +68,10 @@ struct rtas_t rtas = {
|
||||
EXPORT_SYMBOL(rtas);
|
||||
|
||||
DEFINE_SPINLOCK(rtas_data_buf_lock);
|
||||
EXPORT_SYMBOL(rtas_data_buf_lock);
|
||||
EXPORT_SYMBOL_GPL(rtas_data_buf_lock);
|
||||
|
||||
char rtas_data_buf[RTAS_DATA_BUF_SIZE] __cacheline_aligned;
|
||||
EXPORT_SYMBOL(rtas_data_buf);
|
||||
char rtas_data_buf[RTAS_DATA_BUF_SIZE] __aligned(SZ_4K);
|
||||
EXPORT_SYMBOL_GPL(rtas_data_buf);
|
||||
|
||||
unsigned long rtas_rmo_buf;
|
||||
|
||||
@@ -80,7 +80,7 @@ unsigned long rtas_rmo_buf;
|
||||
* This is done like this so rtas_flash can be a module.
|
||||
*/
|
||||
void (*rtas_flash_term_hook)(int);
|
||||
EXPORT_SYMBOL(rtas_flash_term_hook);
|
||||
EXPORT_SYMBOL_GPL(rtas_flash_term_hook);
|
||||
|
||||
/* RTAS use home made raw locking instead of spin_lock_irqsave
|
||||
* because those can be called from within really nasty contexts
|
||||
@@ -328,7 +328,7 @@ void rtas_progress(char *s, unsigned short hex)
|
||||
|
||||
spin_unlock(&progress_lock);
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_progress); /* needed by rtas_flash module */
|
||||
EXPORT_SYMBOL_GPL(rtas_progress); /* needed by rtas_flash module */
|
||||
|
||||
int rtas_token(const char *service)
|
||||
{
|
||||
@@ -338,7 +338,7 @@ int rtas_token(const char *service)
|
||||
tokp = of_get_property(rtas.dev, service, NULL);
|
||||
return tokp ? be32_to_cpu(*tokp) : RTAS_UNKNOWN_SERVICE;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_token);
|
||||
EXPORT_SYMBOL_GPL(rtas_token);
|
||||
|
||||
int rtas_service_present(const char *service)
|
||||
{
|
||||
@@ -498,7 +498,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...)
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_call);
|
||||
EXPORT_SYMBOL_GPL(rtas_call);
|
||||
|
||||
/* For RTAS_BUSY (-2), delay for 1 millisecond. For an extended busy status
|
||||
* code of 990n, perform the hinted delay of 10^n (last digit) milliseconds.
|
||||
@@ -533,7 +533,7 @@ unsigned int rtas_busy_delay(int status)
|
||||
|
||||
return ms;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_busy_delay);
|
||||
EXPORT_SYMBOL_GPL(rtas_busy_delay);
|
||||
|
||||
static int rtas_error_rc(int rtas_rc)
|
||||
{
|
||||
@@ -579,7 +579,7 @@ int rtas_get_power_level(int powerdomain, int *level)
|
||||
return rtas_error_rc(rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_get_power_level);
|
||||
EXPORT_SYMBOL_GPL(rtas_get_power_level);
|
||||
|
||||
int rtas_set_power_level(int powerdomain, int level, int *setlevel)
|
||||
{
|
||||
@@ -597,7 +597,7 @@ int rtas_set_power_level(int powerdomain, int level, int *setlevel)
|
||||
return rtas_error_rc(rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_set_power_level);
|
||||
EXPORT_SYMBOL_GPL(rtas_set_power_level);
|
||||
|
||||
int rtas_get_sensor(int sensor, int index, int *state)
|
||||
{
|
||||
@@ -615,7 +615,7 @@ int rtas_get_sensor(int sensor, int index, int *state)
|
||||
return rtas_error_rc(rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_get_sensor);
|
||||
EXPORT_SYMBOL_GPL(rtas_get_sensor);
|
||||
|
||||
int rtas_get_sensor_fast(int sensor, int index, int *state)
|
||||
{
|
||||
@@ -676,7 +676,7 @@ int rtas_set_indicator(int indicator, int index, int new_value)
|
||||
return rtas_error_rc(rc);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(rtas_set_indicator);
|
||||
EXPORT_SYMBOL_GPL(rtas_set_indicator);
|
||||
|
||||
/*
|
||||
* Ignoring RTAS extended delay
|
||||
|
||||
@@ -79,9 +79,8 @@ static u32 phys_coresperchip; /* Physical cores per chip */
|
||||
*/
|
||||
void read_24x7_sys_info(void)
|
||||
{
|
||||
int call_status, len, ntypes;
|
||||
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
const s32 token = rtas_token("ibm,get-system-parameter");
|
||||
int call_status;
|
||||
|
||||
/*
|
||||
* Making system parameter: chips and sockets and cores per chip
|
||||
@@ -91,32 +90,27 @@ void read_24x7_sys_info(void)
|
||||
phys_chipspersocket = 1;
|
||||
phys_coresperchip = 1;
|
||||
|
||||
call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
|
||||
NULL,
|
||||
PROCESSOR_MODULE_INFO,
|
||||
__pa(rtas_data_buf),
|
||||
RTAS_DATA_BUF_SIZE);
|
||||
do {
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
call_status = rtas_call(token, 3, 1, NULL, PROCESSOR_MODULE_INFO,
|
||||
__pa(rtas_data_buf), RTAS_DATA_BUF_SIZE);
|
||||
if (call_status == 0) {
|
||||
int ntypes = be16_to_cpup((__be16 *)&rtas_data_buf[2]);
|
||||
int len = be16_to_cpup((__be16 *)&rtas_data_buf[0]);
|
||||
|
||||
if (len >= 8 && ntypes != 0) {
|
||||
phys_sockets = be16_to_cpup((__be16 *)&rtas_data_buf[4]);
|
||||
phys_chipspersocket = be16_to_cpup((__be16 *)&rtas_data_buf[6]);
|
||||
phys_coresperchip = be16_to_cpup((__be16 *)&rtas_data_buf[8]);
|
||||
}
|
||||
}
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
} while (rtas_busy_delay(call_status));
|
||||
|
||||
if (call_status != 0) {
|
||||
pr_err("Error calling get-system-parameter %d\n",
|
||||
call_status);
|
||||
} else {
|
||||
len = be16_to_cpup((__be16 *)&rtas_data_buf[0]);
|
||||
if (len < 8)
|
||||
goto out;
|
||||
|
||||
ntypes = be16_to_cpup((__be16 *)&rtas_data_buf[2]);
|
||||
|
||||
if (!ntypes)
|
||||
goto out;
|
||||
|
||||
phys_sockets = be16_to_cpup((__be16 *)&rtas_data_buf[4]);
|
||||
phys_chipspersocket = be16_to_cpup((__be16 *)&rtas_data_buf[6]);
|
||||
phys_coresperchip = be16_to_cpup((__be16 *)&rtas_data_buf[8]);
|
||||
}
|
||||
|
||||
out:
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
}
|
||||
|
||||
/* Domains for which more than one result element are returned for each event. */
|
||||
|
||||
@@ -164,6 +164,20 @@ static unsigned long single_gpci_request(u32 req, u32 starting_index,
|
||||
|
||||
ret = plpar_hcall_norets(H_GET_PERF_COUNTER_INFO,
|
||||
virt_to_phys(arg), HGPCI_REQ_BUFFER_SIZE);
|
||||
|
||||
/*
|
||||
* ret value as 'H_PARAMETER' with detail_rc as 'GEN_BUF_TOO_SMALL',
|
||||
* specifies that the current buffer size cannot accommodate
|
||||
* all the information and a partial buffer returned.
|
||||
* Since in this function we are only accessing data for a given starting index,
|
||||
* we don't need to accommodate whole data and can get required count by
|
||||
* accessing first entry data.
|
||||
* Hence hcall fails only incase the ret value is other than H_SUCCESS or
|
||||
* H_PARAMETER with detail_rc value as GEN_BUF_TOO_SMALL(0x1B).
|
||||
*/
|
||||
if (ret == H_PARAMETER && be32_to_cpu(arg->params.detail_rc) == 0x1B)
|
||||
ret = 0;
|
||||
|
||||
if (ret) {
|
||||
pr_devel("hcall failed: 0x%lx\n", ret);
|
||||
goto out;
|
||||
@@ -228,6 +242,7 @@ static int h_gpci_event_init(struct perf_event *event)
|
||||
{
|
||||
u64 count;
|
||||
u8 length;
|
||||
unsigned long ret;
|
||||
|
||||
/* Not our event */
|
||||
if (event->attr.type != event->pmu->type)
|
||||
@@ -258,13 +273,23 @@ static int h_gpci_event_init(struct perf_event *event)
|
||||
}
|
||||
|
||||
/* check if the request works... */
|
||||
if (single_gpci_request(event_get_request(event),
|
||||
ret = single_gpci_request(event_get_request(event),
|
||||
event_get_starting_index(event),
|
||||
event_get_secondary_index(event),
|
||||
event_get_counter_info_version(event),
|
||||
event_get_offset(event),
|
||||
length,
|
||||
&count)) {
|
||||
&count);
|
||||
|
||||
/*
|
||||
* ret value as H_AUTHORITY implies that partition is not permitted to retrieve
|
||||
* performance information, and required to set
|
||||
* "Enable Performance Information Collection" option.
|
||||
*/
|
||||
if (ret == H_AUTHORITY)
|
||||
return -EPERM;
|
||||
|
||||
if (ret) {
|
||||
pr_devel("gpci hcall failed\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@@ -100,9 +100,6 @@ static void __init linkstation_init_IRQ(void)
|
||||
mpic_init(mpic);
|
||||
}
|
||||
|
||||
extern void avr_uart_configure(void);
|
||||
extern void avr_uart_send(const char);
|
||||
|
||||
static void __noreturn linkstation_restart(char *cmd)
|
||||
{
|
||||
local_irq_disable();
|
||||
|
||||
@@ -156,4 +156,7 @@ int mpc10x_disable_store_gathering(struct pci_controller *hose);
|
||||
/* For MPC107 boards that use the built-in openpic */
|
||||
void mpc10x_set_openpic(void);
|
||||
|
||||
void avr_uart_configure(void);
|
||||
void avr_uart_send(const char c);
|
||||
|
||||
#endif /* __PPC_KERNEL_MPC10X_H */
|
||||
|
||||
@@ -2334,7 +2334,8 @@ static void pnv_ioda_setup_pe_res(struct pnv_ioda_pe *pe,
|
||||
int index;
|
||||
int64_t rc;
|
||||
|
||||
if (!res || !res->flags || res->start > res->end)
|
||||
if (!res || !res->flags || res->start > res->end ||
|
||||
res->flags & IORESOURCE_UNSET)
|
||||
return;
|
||||
|
||||
if (res->flags & IORESOURCE_IO) {
|
||||
|
||||
@@ -1434,22 +1434,22 @@ static inline void __init check_lp_set_hblkrm(unsigned int lp,
|
||||
|
||||
void __init pseries_lpar_read_hblkrm_characteristics(void)
|
||||
{
|
||||
const s32 token = rtas_token("ibm,get-system-parameter");
|
||||
unsigned char local_buffer[SPLPAR_TLB_BIC_MAXLENGTH];
|
||||
int call_status, len, idx, bpsize;
|
||||
|
||||
if (!firmware_has_feature(FW_FEATURE_BLOCK_REMOVE))
|
||||
return;
|
||||
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
memset(rtas_data_buf, 0, RTAS_DATA_BUF_SIZE);
|
||||
call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
|
||||
NULL,
|
||||
SPLPAR_TLB_BIC_TOKEN,
|
||||
__pa(rtas_data_buf),
|
||||
RTAS_DATA_BUF_SIZE);
|
||||
memcpy(local_buffer, rtas_data_buf, SPLPAR_TLB_BIC_MAXLENGTH);
|
||||
local_buffer[SPLPAR_TLB_BIC_MAXLENGTH - 1] = '\0';
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
do {
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
memset(rtas_data_buf, 0, RTAS_DATA_BUF_SIZE);
|
||||
call_status = rtas_call(token, 3, 1, NULL, SPLPAR_TLB_BIC_TOKEN,
|
||||
__pa(rtas_data_buf), RTAS_DATA_BUF_SIZE);
|
||||
memcpy(local_buffer, rtas_data_buf, SPLPAR_TLB_BIC_MAXLENGTH);
|
||||
local_buffer[SPLPAR_TLB_BIC_MAXLENGTH - 1] = '\0';
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
} while (rtas_busy_delay(call_status));
|
||||
|
||||
if (call_status != 0) {
|
||||
pr_warn("%s %s Error calling get-system-parameter (0x%x)\n",
|
||||
|
||||
@@ -322,6 +322,7 @@ static void parse_mpp_x_data(struct seq_file *m)
|
||||
*/
|
||||
static void parse_system_parameter_string(struct seq_file *m)
|
||||
{
|
||||
const s32 token = rtas_token("ibm,get-system-parameter");
|
||||
int call_status;
|
||||
|
||||
unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
|
||||
@@ -331,16 +332,15 @@ static void parse_system_parameter_string(struct seq_file *m)
|
||||
return;
|
||||
}
|
||||
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
memset(rtas_data_buf, 0, SPLPAR_MAXLENGTH);
|
||||
call_status = rtas_call(rtas_token("ibm,get-system-parameter"), 3, 1,
|
||||
NULL,
|
||||
SPLPAR_CHARACTERISTICS_TOKEN,
|
||||
__pa(rtas_data_buf),
|
||||
RTAS_DATA_BUF_SIZE);
|
||||
memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH);
|
||||
local_buffer[SPLPAR_MAXLENGTH - 1] = '\0';
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
do {
|
||||
spin_lock(&rtas_data_buf_lock);
|
||||
memset(rtas_data_buf, 0, SPLPAR_MAXLENGTH);
|
||||
call_status = rtas_call(token, 3, 1, NULL, SPLPAR_CHARACTERISTICS_TOKEN,
|
||||
__pa(rtas_data_buf), RTAS_DATA_BUF_SIZE);
|
||||
memcpy(local_buffer, rtas_data_buf, SPLPAR_MAXLENGTH);
|
||||
local_buffer[SPLPAR_MAXLENGTH - 1] = '\0';
|
||||
spin_unlock(&rtas_data_buf_lock);
|
||||
} while (rtas_busy_delay(call_status));
|
||||
|
||||
if (call_status != 0) {
|
||||
printk(KERN_INFO
|
||||
|
||||
@@ -70,6 +70,7 @@
|
||||
interrupt-parent = <&gpio>;
|
||||
interrupts = <1 IRQ_TYPE_LEVEL_LOW>;
|
||||
interrupt-controller;
|
||||
#interrupt-cells = <2>;
|
||||
|
||||
regulators {
|
||||
vdd_bcore1: bcore1 {
|
||||
|
||||
@@ -128,7 +128,7 @@
|
||||
#define FUNCT3_C_J 0xa000
|
||||
#define FUNCT3_C_JAL 0x2000
|
||||
#define FUNCT4_C_JR 0x8000
|
||||
#define FUNCT4_C_JALR 0xf000
|
||||
#define FUNCT4_C_JALR 0x9000
|
||||
|
||||
#define FUNCT12_SRET 0x10200000
|
||||
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
* Define vmemmap for pfn_to_page & page_to_pfn calls. Needed if kernel
|
||||
* is configured with CONFIG_SPARSEMEM_VMEMMAP enabled.
|
||||
*/
|
||||
#define vmemmap ((struct page *)VMEMMAP_START)
|
||||
#define vmemmap ((struct page *)VMEMMAP_START - (phys_ram_base >> PAGE_SHIFT))
|
||||
|
||||
#define PCI_IO_SIZE SZ_16M
|
||||
#define PCI_IO_END VMEMMAP_START
|
||||
|
||||
@@ -78,6 +78,7 @@ typedef struct dasd_information2_t {
|
||||
* 0x040: give access to raw eckd data
|
||||
* 0x080: enable discard support
|
||||
* 0x100: enable autodisable for IFCC errors (default)
|
||||
* 0x200: enable requeue of all requests on autoquiesce
|
||||
*/
|
||||
#define DASD_FEATURE_READONLY 0x001
|
||||
#define DASD_FEATURE_USEDIAG 0x002
|
||||
@@ -88,6 +89,7 @@ typedef struct dasd_information2_t {
|
||||
#define DASD_FEATURE_USERAW 0x040
|
||||
#define DASD_FEATURE_DISCARD 0x080
|
||||
#define DASD_FEATURE_PATH_AUTODISABLE 0x100
|
||||
#define DASD_FEATURE_REQUEUEQUIESCE 0x200
|
||||
#define DASD_FEATURE_DEFAULT DASD_FEATURE_PATH_AUTODISABLE
|
||||
|
||||
#define DASD_PARTN_BITS 2
|
||||
|
||||
@@ -22,7 +22,7 @@ KBUILD_AFLAGS_32 += -m31 -s
|
||||
KBUILD_CFLAGS_32 := $(filter-out -m64,$(KBUILD_CFLAGS))
|
||||
KBUILD_CFLAGS_32 += -m31 -fPIC -shared -fno-common -fno-builtin
|
||||
|
||||
LDFLAGS_vdso32.so.dbg += -fPIC -shared -soname=linux-vdso32.so.1 \
|
||||
LDFLAGS_vdso32.so.dbg += -shared -soname=linux-vdso32.so.1 \
|
||||
--hash-style=both --build-id=sha1 -melf_s390 -T
|
||||
|
||||
$(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_32)
|
||||
|
||||
@@ -26,7 +26,7 @@ KBUILD_AFLAGS_64 += -m64 -s
|
||||
|
||||
KBUILD_CFLAGS_64 := $(filter-out -m64,$(KBUILD_CFLAGS))
|
||||
KBUILD_CFLAGS_64 += -m64 -fPIC -fno-common -fno-builtin
|
||||
ldflags-y := -fPIC -shared -soname=linux-vdso64.so.1 \
|
||||
ldflags-y := -shared -soname=linux-vdso64.so.1 \
|
||||
--hash-style=both --build-id=sha1 -T
|
||||
|
||||
$(targets:%=$(obj)/%.dbg): KBUILD_CFLAGS = $(KBUILD_CFLAGS_64)
|
||||
|
||||
@@ -211,13 +211,13 @@ void vtime_flush(struct task_struct *tsk)
|
||||
virt_timer_expire();
|
||||
|
||||
steal = S390_lowcore.steal_timer;
|
||||
avg_steal = S390_lowcore.avg_steal_timer / 2;
|
||||
avg_steal = S390_lowcore.avg_steal_timer;
|
||||
if ((s64) steal > 0) {
|
||||
S390_lowcore.steal_timer = 0;
|
||||
account_steal_time(cputime_to_nsecs(steal));
|
||||
avg_steal += steal;
|
||||
}
|
||||
S390_lowcore.avg_steal_timer = avg_steal;
|
||||
S390_lowcore.avg_steal_timer = avg_steal / 2;
|
||||
}
|
||||
|
||||
static u64 vtime_delta(void)
|
||||
|
||||
@@ -228,7 +228,7 @@ resource_size_t pcibios_align_resource(void *data, const struct resource *res,
|
||||
/* combine single writes by using store-block insn */
|
||||
void __iowrite64_copy(void __iomem *to, const void *from, size_t count)
|
||||
{
|
||||
zpci_memcpy_toio(to, from, count);
|
||||
zpci_memcpy_toio(to, from, count * 8);
|
||||
}
|
||||
|
||||
static void __iomem *__ioremap(phys_addr_t addr, size_t size, pgprot_t prot)
|
||||
|
||||
@@ -696,7 +696,7 @@ err1:
|
||||
return err;
|
||||
}
|
||||
|
||||
static const struct of_device_id grpci1_of_match[] __initconst = {
|
||||
static const struct of_device_id grpci1_of_match[] = {
|
||||
{
|
||||
.name = "GAISLER_PCIFBRG",
|
||||
},
|
||||
|
||||
@@ -887,7 +887,7 @@ err1:
|
||||
return err;
|
||||
}
|
||||
|
||||
static const struct of_device_id grpci2_of_match[] __initconst = {
|
||||
static const struct of_device_id grpci2_of_match[] = {
|
||||
{
|
||||
.name = "GAISLER_GRPCI2",
|
||||
},
|
||||
|
||||
@@ -207,6 +207,8 @@ extern void srso_alias_untrain_ret(void);
|
||||
extern void entry_untrain_ret(void);
|
||||
extern void entry_ibpb(void);
|
||||
|
||||
extern void (*x86_return_thunk)(void);
|
||||
|
||||
#ifdef CONFIG_RETPOLINE
|
||||
|
||||
typedef u8 retpoline_thunk_t[RETPOLINE_THUNK_SIZE];
|
||||
|
||||
@@ -95,25 +95,41 @@ union text_poke_insn {
|
||||
} __attribute__((packed));
|
||||
};
|
||||
|
||||
static __always_inline
|
||||
void __text_gen_insn(void *buf, u8 opcode, const void *addr, const void *dest, int size)
|
||||
{
|
||||
union text_poke_insn *insn = buf;
|
||||
|
||||
BUG_ON(size < text_opcode_size(opcode));
|
||||
|
||||
/*
|
||||
* Hide the addresses to avoid the compiler folding in constants when
|
||||
* referencing code, these can mess up annotations like
|
||||
* ANNOTATE_NOENDBR.
|
||||
*/
|
||||
OPTIMIZER_HIDE_VAR(insn);
|
||||
OPTIMIZER_HIDE_VAR(addr);
|
||||
OPTIMIZER_HIDE_VAR(dest);
|
||||
|
||||
insn->opcode = opcode;
|
||||
|
||||
if (size > 1) {
|
||||
insn->disp = (long)dest - (long)(addr + size);
|
||||
if (size == 2) {
|
||||
/*
|
||||
* Ensure that for JMP8 the displacement
|
||||
* actually fits the signed byte.
|
||||
*/
|
||||
BUG_ON((insn->disp >> 31) != (insn->disp >> 7));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static __always_inline
|
||||
void *text_gen_insn(u8 opcode, const void *addr, const void *dest)
|
||||
{
|
||||
static union text_poke_insn insn; /* per instance */
|
||||
int size = text_opcode_size(opcode);
|
||||
|
||||
insn.opcode = opcode;
|
||||
|
||||
if (size > 1) {
|
||||
insn.disp = (long)dest - (long)(addr + size);
|
||||
if (size == 2) {
|
||||
/*
|
||||
* Ensure that for JMP9 the displacement
|
||||
* actually fits the signed byte.
|
||||
*/
|
||||
BUG_ON((insn.disp >> 31) != (insn.disp >> 7));
|
||||
}
|
||||
}
|
||||
|
||||
__text_gen_insn(&insn, opcode, addr, dest, text_opcode_size(opcode));
|
||||
return &insn.text;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
#include <linux/seqlock.h>
|
||||
#include <uapi/asm/vsyscall.h>
|
||||
#include <asm/page_types.h>
|
||||
|
||||
#ifdef CONFIG_X86_VSYSCALL_EMULATION
|
||||
extern void map_vsyscall(void);
|
||||
@@ -24,4 +25,13 @@ static inline bool emulate_vsyscall(unsigned long error_code,
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The (legacy) vsyscall page is the long page in the kernel portion
|
||||
* of the address space that has user-accessible permissions.
|
||||
*/
|
||||
static inline bool is_vsyscall_vaddr(unsigned long vaddr)
|
||||
{
|
||||
return unlikely((vaddr & PAGE_MASK) == VSYSCALL_ADDR);
|
||||
}
|
||||
|
||||
#endif /* _ASM_X86_VSYSCALL_H */
|
||||
|
||||
@@ -521,6 +521,7 @@ void __init_or_module noinline apply_retpolines(s32 *start, s32 *end)
|
||||
}
|
||||
|
||||
#ifdef CONFIG_RETHUNK
|
||||
|
||||
/*
|
||||
* Rewrite the compiler generated return thunk tail-calls.
|
||||
*
|
||||
@@ -536,14 +537,18 @@ static int patch_return(void *addr, struct insn *insn, u8 *bytes)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (cpu_feature_enabled(X86_FEATURE_RETHUNK))
|
||||
return -1;
|
||||
if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) {
|
||||
if (x86_return_thunk == __x86_return_thunk)
|
||||
return -1;
|
||||
|
||||
bytes[i++] = RET_INSN_OPCODE;
|
||||
i = JMP32_INSN_SIZE;
|
||||
__text_gen_insn(bytes, JMP32_INSN_OPCODE, addr, x86_return_thunk, i);
|
||||
} else {
|
||||
bytes[i++] = RET_INSN_OPCODE;
|
||||
}
|
||||
|
||||
for (; i < insn->length;)
|
||||
bytes[i++] = INT3_INSN_OPCODE;
|
||||
|
||||
return i;
|
||||
}
|
||||
|
||||
|
||||
@@ -181,6 +181,90 @@ static bool bad_spectre_microcode(struct cpuinfo_x86 *c)
|
||||
return false;
|
||||
}
|
||||
|
||||
#define MSR_IA32_TME_ACTIVATE 0x982
|
||||
|
||||
/* Helpers to access TME_ACTIVATE MSR */
|
||||
#define TME_ACTIVATE_LOCKED(x) (x & 0x1)
|
||||
#define TME_ACTIVATE_ENABLED(x) (x & 0x2)
|
||||
|
||||
#define TME_ACTIVATE_POLICY(x) ((x >> 4) & 0xf) /* Bits 7:4 */
|
||||
#define TME_ACTIVATE_POLICY_AES_XTS_128 0
|
||||
|
||||
#define TME_ACTIVATE_KEYID_BITS(x) ((x >> 32) & 0xf) /* Bits 35:32 */
|
||||
|
||||
#define TME_ACTIVATE_CRYPTO_ALGS(x) ((x >> 48) & 0xffff) /* Bits 63:48 */
|
||||
#define TME_ACTIVATE_CRYPTO_AES_XTS_128 1
|
||||
|
||||
/* Values for mktme_status (SW only construct) */
|
||||
#define MKTME_ENABLED 0
|
||||
#define MKTME_DISABLED 1
|
||||
#define MKTME_UNINITIALIZED 2
|
||||
static int mktme_status = MKTME_UNINITIALIZED;
|
||||
|
||||
static void detect_tme_early(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u64 tme_activate, tme_policy, tme_crypto_algs;
|
||||
int keyid_bits = 0, nr_keyids = 0;
|
||||
static u64 tme_activate_cpu0 = 0;
|
||||
|
||||
rdmsrl(MSR_IA32_TME_ACTIVATE, tme_activate);
|
||||
|
||||
if (mktme_status != MKTME_UNINITIALIZED) {
|
||||
if (tme_activate != tme_activate_cpu0) {
|
||||
/* Broken BIOS? */
|
||||
pr_err_once("x86/tme: configuration is inconsistent between CPUs\n");
|
||||
pr_err_once("x86/tme: MKTME is not usable\n");
|
||||
mktme_status = MKTME_DISABLED;
|
||||
|
||||
/* Proceed. We may need to exclude bits from x86_phys_bits. */
|
||||
}
|
||||
} else {
|
||||
tme_activate_cpu0 = tme_activate;
|
||||
}
|
||||
|
||||
if (!TME_ACTIVATE_LOCKED(tme_activate) || !TME_ACTIVATE_ENABLED(tme_activate)) {
|
||||
pr_info_once("x86/tme: not enabled by BIOS\n");
|
||||
mktme_status = MKTME_DISABLED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mktme_status != MKTME_UNINITIALIZED)
|
||||
goto detect_keyid_bits;
|
||||
|
||||
pr_info("x86/tme: enabled by BIOS\n");
|
||||
|
||||
tme_policy = TME_ACTIVATE_POLICY(tme_activate);
|
||||
if (tme_policy != TME_ACTIVATE_POLICY_AES_XTS_128)
|
||||
pr_warn("x86/tme: Unknown policy is active: %#llx\n", tme_policy);
|
||||
|
||||
tme_crypto_algs = TME_ACTIVATE_CRYPTO_ALGS(tme_activate);
|
||||
if (!(tme_crypto_algs & TME_ACTIVATE_CRYPTO_AES_XTS_128)) {
|
||||
pr_err("x86/mktme: No known encryption algorithm is supported: %#llx\n",
|
||||
tme_crypto_algs);
|
||||
mktme_status = MKTME_DISABLED;
|
||||
}
|
||||
detect_keyid_bits:
|
||||
keyid_bits = TME_ACTIVATE_KEYID_BITS(tme_activate);
|
||||
nr_keyids = (1UL << keyid_bits) - 1;
|
||||
if (nr_keyids) {
|
||||
pr_info_once("x86/mktme: enabled by BIOS\n");
|
||||
pr_info_once("x86/mktme: %d KeyIDs available\n", nr_keyids);
|
||||
} else {
|
||||
pr_info_once("x86/mktme: disabled by BIOS\n");
|
||||
}
|
||||
|
||||
if (mktme_status == MKTME_UNINITIALIZED) {
|
||||
/* MKTME is usable */
|
||||
mktme_status = MKTME_ENABLED;
|
||||
}
|
||||
|
||||
/*
|
||||
* KeyID bits effectively lower the number of physical address
|
||||
* bits. Update cpuinfo_x86::x86_phys_bits accordingly.
|
||||
*/
|
||||
c->x86_phys_bits -= keyid_bits;
|
||||
}
|
||||
|
||||
static void early_init_intel(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u64 misc_enable;
|
||||
@@ -332,6 +416,13 @@ static void early_init_intel(struct cpuinfo_x86 *c)
|
||||
*/
|
||||
if (detect_extended_topology_early(c) < 0)
|
||||
detect_ht_early(c);
|
||||
|
||||
/*
|
||||
* Adjust the number of physical bits early because it affects the
|
||||
* valid bits of the MTRR mask registers.
|
||||
*/
|
||||
if (cpu_has(c, X86_FEATURE_TME))
|
||||
detect_tme_early(c);
|
||||
}
|
||||
|
||||
static void bsp_init_intel(struct cpuinfo_x86 *c)
|
||||
@@ -492,90 +583,6 @@ static void srat_detect_node(struct cpuinfo_x86 *c)
|
||||
#endif
|
||||
}
|
||||
|
||||
#define MSR_IA32_TME_ACTIVATE 0x982
|
||||
|
||||
/* Helpers to access TME_ACTIVATE MSR */
|
||||
#define TME_ACTIVATE_LOCKED(x) (x & 0x1)
|
||||
#define TME_ACTIVATE_ENABLED(x) (x & 0x2)
|
||||
|
||||
#define TME_ACTIVATE_POLICY(x) ((x >> 4) & 0xf) /* Bits 7:4 */
|
||||
#define TME_ACTIVATE_POLICY_AES_XTS_128 0
|
||||
|
||||
#define TME_ACTIVATE_KEYID_BITS(x) ((x >> 32) & 0xf) /* Bits 35:32 */
|
||||
|
||||
#define TME_ACTIVATE_CRYPTO_ALGS(x) ((x >> 48) & 0xffff) /* Bits 63:48 */
|
||||
#define TME_ACTIVATE_CRYPTO_AES_XTS_128 1
|
||||
|
||||
/* Values for mktme_status (SW only construct) */
|
||||
#define MKTME_ENABLED 0
|
||||
#define MKTME_DISABLED 1
|
||||
#define MKTME_UNINITIALIZED 2
|
||||
static int mktme_status = MKTME_UNINITIALIZED;
|
||||
|
||||
static void detect_tme(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u64 tme_activate, tme_policy, tme_crypto_algs;
|
||||
int keyid_bits = 0, nr_keyids = 0;
|
||||
static u64 tme_activate_cpu0 = 0;
|
||||
|
||||
rdmsrl(MSR_IA32_TME_ACTIVATE, tme_activate);
|
||||
|
||||
if (mktme_status != MKTME_UNINITIALIZED) {
|
||||
if (tme_activate != tme_activate_cpu0) {
|
||||
/* Broken BIOS? */
|
||||
pr_err_once("x86/tme: configuration is inconsistent between CPUs\n");
|
||||
pr_err_once("x86/tme: MKTME is not usable\n");
|
||||
mktme_status = MKTME_DISABLED;
|
||||
|
||||
/* Proceed. We may need to exclude bits from x86_phys_bits. */
|
||||
}
|
||||
} else {
|
||||
tme_activate_cpu0 = tme_activate;
|
||||
}
|
||||
|
||||
if (!TME_ACTIVATE_LOCKED(tme_activate) || !TME_ACTIVATE_ENABLED(tme_activate)) {
|
||||
pr_info_once("x86/tme: not enabled by BIOS\n");
|
||||
mktme_status = MKTME_DISABLED;
|
||||
return;
|
||||
}
|
||||
|
||||
if (mktme_status != MKTME_UNINITIALIZED)
|
||||
goto detect_keyid_bits;
|
||||
|
||||
pr_info("x86/tme: enabled by BIOS\n");
|
||||
|
||||
tme_policy = TME_ACTIVATE_POLICY(tme_activate);
|
||||
if (tme_policy != TME_ACTIVATE_POLICY_AES_XTS_128)
|
||||
pr_warn("x86/tme: Unknown policy is active: %#llx\n", tme_policy);
|
||||
|
||||
tme_crypto_algs = TME_ACTIVATE_CRYPTO_ALGS(tme_activate);
|
||||
if (!(tme_crypto_algs & TME_ACTIVATE_CRYPTO_AES_XTS_128)) {
|
||||
pr_err("x86/mktme: No known encryption algorithm is supported: %#llx\n",
|
||||
tme_crypto_algs);
|
||||
mktme_status = MKTME_DISABLED;
|
||||
}
|
||||
detect_keyid_bits:
|
||||
keyid_bits = TME_ACTIVATE_KEYID_BITS(tme_activate);
|
||||
nr_keyids = (1UL << keyid_bits) - 1;
|
||||
if (nr_keyids) {
|
||||
pr_info_once("x86/mktme: enabled by BIOS\n");
|
||||
pr_info_once("x86/mktme: %d KeyIDs available\n", nr_keyids);
|
||||
} else {
|
||||
pr_info_once("x86/mktme: disabled by BIOS\n");
|
||||
}
|
||||
|
||||
if (mktme_status == MKTME_UNINITIALIZED) {
|
||||
/* MKTME is usable */
|
||||
mktme_status = MKTME_ENABLED;
|
||||
}
|
||||
|
||||
/*
|
||||
* KeyID bits effectively lower the number of physical address
|
||||
* bits. Update cpuinfo_x86::x86_phys_bits accordingly.
|
||||
*/
|
||||
c->x86_phys_bits -= keyid_bits;
|
||||
}
|
||||
|
||||
static void init_cpuid_fault(struct cpuinfo_x86 *c)
|
||||
{
|
||||
u64 msr;
|
||||
@@ -712,9 +719,6 @@ static void init_intel(struct cpuinfo_x86 *c)
|
||||
|
||||
init_ia32_feat_ctl(c);
|
||||
|
||||
if (cpu_has(c, X86_FEATURE_TME))
|
||||
detect_tme(c);
|
||||
|
||||
init_intel_misc_features(c);
|
||||
|
||||
split_lock_init();
|
||||
|
||||
@@ -246,12 +246,13 @@ static int __restore_fpregs_from_user(void __user *buf, u64 xrestore,
|
||||
* Attempt to restore the FPU registers directly from user memory.
|
||||
* Pagefaults are handled and any errors returned are fatal.
|
||||
*/
|
||||
static int restore_fpregs_from_user(void __user *buf, u64 xrestore,
|
||||
bool fx_only, unsigned int size)
|
||||
static int restore_fpregs_from_user(void __user *buf, u64 xrestore, bool fx_only)
|
||||
{
|
||||
struct fpu *fpu = ¤t->thread.fpu;
|
||||
int ret;
|
||||
|
||||
/* Restore enabled features only. */
|
||||
xrestore &= xfeatures_mask_all & XFEATURE_MASK_USER_SUPPORTED;
|
||||
retry:
|
||||
fpregs_lock();
|
||||
pagefault_disable();
|
||||
@@ -278,7 +279,7 @@ retry:
|
||||
if (ret != -EFAULT)
|
||||
return -EINVAL;
|
||||
|
||||
if (!fault_in_readable(buf, size))
|
||||
if (!fault_in_readable(buf, fpu_user_xstate_size))
|
||||
goto retry;
|
||||
return -EFAULT;
|
||||
}
|
||||
@@ -303,7 +304,6 @@ retry:
|
||||
static int __fpu_restore_sig(void __user *buf, void __user *buf_fx,
|
||||
bool ia32_fxstate)
|
||||
{
|
||||
int state_size = fpu_kernel_xstate_size;
|
||||
struct task_struct *tsk = current;
|
||||
struct fpu *fpu = &tsk->thread.fpu;
|
||||
struct user_i387_ia32_struct env;
|
||||
@@ -319,7 +319,6 @@ static int __fpu_restore_sig(void __user *buf, void __user *buf_fx,
|
||||
return ret;
|
||||
|
||||
fx_only = !fx_sw_user.magic1;
|
||||
state_size = fx_sw_user.xstate_size;
|
||||
user_xfeatures = fx_sw_user.xfeatures;
|
||||
} else {
|
||||
user_xfeatures = XFEATURE_MASK_FPSSE;
|
||||
@@ -332,8 +331,7 @@ static int __fpu_restore_sig(void __user *buf, void __user *buf_fx,
|
||||
* faults. If it does, fall back to the slow path below, going
|
||||
* through the kernel buffer with the enabled pagefault handler.
|
||||
*/
|
||||
return restore_fpregs_from_user(buf_fx, user_xfeatures, fx_only,
|
||||
state_size);
|
||||
return restore_fpregs_from_user(buf_fx, user_xfeatures, fx_only);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -367,10 +367,8 @@ create_trampoline(struct ftrace_ops *ops, unsigned int *tramp_size)
|
||||
goto fail;
|
||||
|
||||
ip = trampoline + size;
|
||||
|
||||
/* The trampoline ends with ret(q) */
|
||||
if (cpu_feature_enabled(X86_FEATURE_RETHUNK))
|
||||
memcpy(ip, text_gen_insn(JMP32_INSN_OPCODE, ip, &__x86_return_thunk), JMP32_INSN_SIZE);
|
||||
__text_gen_insn(ip, JMP32_INSN_OPCODE, ip, x86_return_thunk, JMP32_INSN_SIZE);
|
||||
else
|
||||
memcpy(ip, retq, sizeof(retq));
|
||||
|
||||
|
||||
@@ -58,29 +58,12 @@ static void paravirt_BUG(void)
|
||||
BUG();
|
||||
}
|
||||
|
||||
struct branch {
|
||||
unsigned char opcode;
|
||||
u32 delta;
|
||||
} __attribute__((packed));
|
||||
|
||||
static unsigned paravirt_patch_call(void *insn_buff, const void *target,
|
||||
unsigned long addr, unsigned len)
|
||||
{
|
||||
const int call_len = 5;
|
||||
struct branch *b = insn_buff;
|
||||
unsigned long delta = (unsigned long)target - (addr+call_len);
|
||||
|
||||
if (len < call_len) {
|
||||
pr_warn("paravirt: Failed to patch indirect CALL at %ps\n", (void *)addr);
|
||||
/* Kernel might not be viable if patching fails, bail out: */
|
||||
BUG_ON(1);
|
||||
}
|
||||
|
||||
b->opcode = 0xe8; /* call */
|
||||
b->delta = delta;
|
||||
BUILD_BUG_ON(sizeof(*b) != call_len);
|
||||
|
||||
return call_len;
|
||||
__text_gen_insn(insn_buff, CALL_INSN_OPCODE,
|
||||
(void *)addr, target, CALL_INSN_SIZE);
|
||||
return CALL_INSN_SIZE;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PARAVIRT_XXL
|
||||
|
||||
@@ -52,7 +52,7 @@ static void __ref __static_call_transform(void *insn, enum insn_type type,
|
||||
|
||||
case RET:
|
||||
if (cpu_feature_enabled(X86_FEATURE_RETHUNK))
|
||||
code = text_gen_insn(JMP32_INSN_OPCODE, insn, &__x86_return_thunk);
|
||||
code = text_gen_insn(JMP32_INSN_OPCODE, insn, x86_return_thunk);
|
||||
else
|
||||
code = &retinsn;
|
||||
break;
|
||||
|
||||
@@ -787,15 +787,6 @@ show_signal_msg(struct pt_regs *regs, unsigned long error_code,
|
||||
show_opcodes(regs, loglvl);
|
||||
}
|
||||
|
||||
/*
|
||||
* The (legacy) vsyscall page is the long page in the kernel portion
|
||||
* of the address space that has user-accessible permissions.
|
||||
*/
|
||||
static bool is_vsyscall_vaddr(unsigned long vaddr)
|
||||
{
|
||||
return unlikely((vaddr & PAGE_MASK) == VSYSCALL_ADDR);
|
||||
}
|
||||
|
||||
static void
|
||||
__bad_area_nosemaphore(struct pt_regs *regs, unsigned long error_code,
|
||||
unsigned long address, u32 pkey, int si_code)
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/kernel.h>
|
||||
|
||||
#include <asm/vsyscall.h>
|
||||
|
||||
#ifdef CONFIG_X86_64
|
||||
bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
|
||||
{
|
||||
@@ -15,6 +17,14 @@ bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size)
|
||||
if (vaddr < TASK_SIZE_MAX + PAGE_SIZE)
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Reading from the vsyscall page may cause an unhandled fault in
|
||||
* certain cases. Though it is at an address above TASK_SIZE_MAX, it is
|
||||
* usually considered as a user space address.
|
||||
*/
|
||||
if (is_vsyscall_vaddr(vaddr))
|
||||
return false;
|
||||
|
||||
/*
|
||||
* Allow everything during early boot before 'x86_virt_bits'
|
||||
* is initialized. Needed for instruction decoding in early
|
||||
|
||||
@@ -411,7 +411,7 @@ static void emit_return(u8 **pprog, u8 *ip)
|
||||
u8 *prog = *pprog;
|
||||
|
||||
if (cpu_feature_enabled(X86_FEATURE_RETHUNK)) {
|
||||
emit_jump(&prog, &__x86_return_thunk, ip);
|
||||
emit_jump(&prog, x86_return_thunk, ip);
|
||||
} else {
|
||||
EMIT1(0xC3); /* ret */
|
||||
if (IS_ENABLED(CONFIG_SLS))
|
||||
|
||||
@@ -599,6 +599,14 @@ static void print_absolute_relocs(void)
|
||||
if (!(sec_applies->shdr.sh_flags & SHF_ALLOC)) {
|
||||
continue;
|
||||
}
|
||||
/*
|
||||
* Do not perform relocations in .notes section; any
|
||||
* values there are meant for pre-boot consumption (e.g.
|
||||
* startup_xen).
|
||||
*/
|
||||
if (sec_applies->shdr.sh_type == SHT_NOTE) {
|
||||
continue;
|
||||
}
|
||||
sh_symtab = sec_symtab->symtab;
|
||||
sym_strtab = sec_symtab->link->strtab;
|
||||
for (j = 0; j < sec->shdr.sh_size/sizeof(Elf_Rel); j++) {
|
||||
|
||||
@@ -65,6 +65,8 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
char *resched_name, *callfunc_name, *debug_name;
|
||||
|
||||
resched_name = kasprintf(GFP_KERNEL, "resched%d", cpu);
|
||||
if (!resched_name)
|
||||
goto fail_mem;
|
||||
per_cpu(xen_resched_irq, cpu).name = resched_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_RESCHEDULE_VECTOR,
|
||||
cpu,
|
||||
@@ -77,6 +79,8 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
per_cpu(xen_resched_irq, cpu).irq = rc;
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfunc%d", cpu);
|
||||
if (!callfunc_name)
|
||||
goto fail_mem;
|
||||
per_cpu(xen_callfunc_irq, cpu).name = callfunc_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_VECTOR,
|
||||
cpu,
|
||||
@@ -90,6 +94,9 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
|
||||
if (!xen_fifo_events) {
|
||||
debug_name = kasprintf(GFP_KERNEL, "debug%d", cpu);
|
||||
if (!debug_name)
|
||||
goto fail_mem;
|
||||
|
||||
per_cpu(xen_debug_irq, cpu).name = debug_name;
|
||||
rc = bind_virq_to_irqhandler(VIRQ_DEBUG, cpu,
|
||||
xen_debug_interrupt,
|
||||
@@ -101,6 +108,9 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
}
|
||||
|
||||
callfunc_name = kasprintf(GFP_KERNEL, "callfuncsingle%d", cpu);
|
||||
if (!callfunc_name)
|
||||
goto fail_mem;
|
||||
|
||||
per_cpu(xen_callfuncsingle_irq, cpu).name = callfunc_name;
|
||||
rc = bind_ipi_to_irqhandler(XEN_CALL_FUNCTION_SINGLE_VECTOR,
|
||||
cpu,
|
||||
@@ -114,6 +124,8 @@ int xen_smp_intr_init(unsigned int cpu)
|
||||
|
||||
return 0;
|
||||
|
||||
fail_mem:
|
||||
rc = -ENOMEM;
|
||||
fail:
|
||||
xen_smp_intr_free(cpu);
|
||||
return rc;
|
||||
|
||||
@@ -66,6 +66,7 @@ enum opal_response_token {
|
||||
#define SHORT_ATOM_BYTE 0xBF
|
||||
#define MEDIUM_ATOM_BYTE 0xDF
|
||||
#define LONG_ATOM_BYTE 0xE3
|
||||
#define EMPTY_ATOM_BYTE 0xFF
|
||||
|
||||
#define OPAL_INVAL_PARAM 12
|
||||
#define OPAL_MANUFACTURED_INACTIVE 0x08
|
||||
|
||||
@@ -895,16 +895,20 @@ static int response_parse(const u8 *buf, size_t length,
|
||||
token_length = response_parse_medium(iter, pos);
|
||||
else if (pos[0] <= LONG_ATOM_BYTE) /* long atom */
|
||||
token_length = response_parse_long(iter, pos);
|
||||
else if (pos[0] == EMPTY_ATOM_BYTE) /* empty atom */
|
||||
token_length = 1;
|
||||
else /* TOKEN */
|
||||
token_length = response_parse_token(iter, pos);
|
||||
|
||||
if (token_length < 0)
|
||||
return token_length;
|
||||
|
||||
if (pos[0] != EMPTY_ATOM_BYTE)
|
||||
num_entries++;
|
||||
|
||||
pos += token_length;
|
||||
total -= token_length;
|
||||
iter++;
|
||||
num_entries++;
|
||||
}
|
||||
|
||||
resp->num = num_entries;
|
||||
|
||||
@@ -77,6 +77,15 @@ static const struct dmi_system_id dmi_lid_quirks[] = {
|
||||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_DISABLED,
|
||||
},
|
||||
{
|
||||
/* Nextbook Ares 8A tablet, _LID device always reports lid closed */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Insyde"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "CherryTrail"),
|
||||
DMI_MATCH(DMI_BIOS_VERSION, "M882"),
|
||||
},
|
||||
.driver_data = (void *)(long)ACPI_BUTTON_LID_INIT_DISABLED,
|
||||
},
|
||||
{
|
||||
/*
|
||||
* Lenovo Yoga 9 14ITL5, initial notification of the LID device
|
||||
|
||||
@@ -1424,6 +1424,8 @@ int acpi_processor_power_exit(struct acpi_processor *pr)
|
||||
acpi_processor_registered--;
|
||||
if (acpi_processor_registered == 0)
|
||||
cpuidle_unregister_driver(&acpi_idle_driver);
|
||||
|
||||
kfree(dev);
|
||||
}
|
||||
|
||||
pr->flags.power_setup_done = 0;
|
||||
|
||||
@@ -639,6 +639,7 @@ acpi_fwnode_get_named_child_node(const struct fwnode_handle *fwnode,
|
||||
* @index: Index of the reference to return
|
||||
* @num_args: Maximum number of arguments after each reference
|
||||
* @args: Location to store the returned reference with optional arguments
|
||||
* (may be NULL)
|
||||
*
|
||||
* Find property with @name, verifify that it is a package containing at least
|
||||
* one object reference and if so, store the ACPI device object pointer to the
|
||||
@@ -697,6 +698,9 @@ int __acpi_node_get_property_reference(const struct fwnode_handle *fwnode,
|
||||
if (ret)
|
||||
return ret == -ENODEV ? -EINVAL : ret;
|
||||
|
||||
if (!args)
|
||||
return 0;
|
||||
|
||||
args->fwnode = acpi_fwnode_handle(device);
|
||||
args->nargs = 0;
|
||||
return 0;
|
||||
|
||||
@@ -421,6 +421,41 @@ static const struct dmi_system_id asus_laptop[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "K3502ZA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Asus Vivobook S5402ZA",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "S5402ZA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Asus Vivobook S5602ZA",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "S5602ZA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Asus ExpertBook B1502CBA",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "B1502CBA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Asus ExpertBook B2402CBA",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "B2402CBA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.ident = "Asus ExpertBook B2502",
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "B2502CBA"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
@@ -511,6 +546,39 @@ static const struct dmi_system_id lg_laptop[] = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "17U70P"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Infinity E15-5A165-BM */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GM5RG1E0009COM"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Infinity E15-5A305-1M */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_BOARD_NAME, "GM5RGEE0016COM"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Lunnen Ground 15 / AMD Ryzen 5 5500U */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Lunnen"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "LLL5DAW"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* Lunnen Ground 16 / AMD Ryzen 7 5800U */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Lunnen"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "LL6FA"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* MAIBENBEN X577 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "MAIBENBEN"),
|
||||
DMI_MATCH(DMI_BOARD_NAME, "X577"),
|
||||
},
|
||||
},
|
||||
{ }
|
||||
};
|
||||
|
||||
|
||||
@@ -315,18 +315,14 @@ static int acpi_scan_device_check(struct acpi_device *adev)
|
||||
* again).
|
||||
*/
|
||||
if (adev->handler) {
|
||||
dev_warn(&adev->dev, "Already enumerated\n");
|
||||
return -EALREADY;
|
||||
dev_dbg(&adev->dev, "Already enumerated\n");
|
||||
return 0;
|
||||
}
|
||||
error = acpi_bus_scan(adev->handle);
|
||||
if (error) {
|
||||
dev_warn(&adev->dev, "Namespace scan failure\n");
|
||||
return error;
|
||||
}
|
||||
if (!adev->handler) {
|
||||
dev_warn(&adev->dev, "Enumeration failure\n");
|
||||
error = -ENODEV;
|
||||
}
|
||||
} else {
|
||||
error = acpi_scan_device_not_present(adev);
|
||||
}
|
||||
|
||||
@@ -341,6 +341,40 @@ static const struct dmi_system_id video_detect_dmi_table[] = {
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "82BK"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
/* Lenovo ThinkPad X131e (3371 AMD version) */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "3371"),
|
||||
},
|
||||
},
|
||||
{
|
||||
.callback = video_detect_force_native,
|
||||
/* Apple iMac11,3 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "iMac11,3"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/1838 */
|
||||
.callback = video_detect_force_native,
|
||||
/* Apple iMac12,1 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,1"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://gitlab.freedesktop.org/drm/amd/-/issues/2753 */
|
||||
.callback = video_detect_force_native,
|
||||
/* Apple iMac12,2 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "iMac12,2"),
|
||||
},
|
||||
},
|
||||
{
|
||||
/* https://bugzilla.redhat.com/show_bug.cgi?id=1217249 */
|
||||
.callback = video_detect_force_native,
|
||||
|
||||
@@ -49,6 +49,7 @@ enum {
|
||||
enum board_ids {
|
||||
/* board IDs by feature in alphabetical order */
|
||||
board_ahci,
|
||||
board_ahci_43bit_dma,
|
||||
board_ahci_ign_iferr,
|
||||
board_ahci_low_power,
|
||||
board_ahci_no_debounce_delay,
|
||||
@@ -129,6 +130,13 @@ static const struct ata_port_info ahci_port_info[] = {
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_43bit_dma] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_43BIT_ONLY),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
.pio_mask = ATA_PIO4,
|
||||
.udma_mask = ATA_UDMA6,
|
||||
.port_ops = &ahci_ops,
|
||||
},
|
||||
[board_ahci_ign_iferr] = {
|
||||
AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR),
|
||||
.flags = AHCI_FLAG_COMMON,
|
||||
@@ -598,11 +606,11 @@ static const struct pci_device_id ahci_pci_tbl[] = {
|
||||
{ PCI_VDEVICE(PROMISE, 0x3f20), board_ahci }, /* PDC42819 */
|
||||
{ PCI_VDEVICE(PROMISE, 0x3781), board_ahci }, /* FastTrak TX8660 ahci-mode */
|
||||
|
||||
/* Asmedia */
|
||||
/* ASMedia */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0601), board_ahci }, /* ASM1060 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0602), board_ahci }, /* ASM1060 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci }, /* ASM1061 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci }, /* ASM1062 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0611), board_ahci_43bit_dma }, /* ASM1061 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0612), board_ahci_43bit_dma }, /* ASM1061/1062 */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0621), board_ahci }, /* ASM1061R */
|
||||
{ PCI_VDEVICE(ASMEDIA, 0x0622), board_ahci }, /* ASM1062R */
|
||||
|
||||
@@ -658,6 +666,11 @@ MODULE_PARM_DESC(mobile_lpm_policy, "Default LPM policy for mobile chipsets");
|
||||
static void ahci_pci_save_initial_config(struct pci_dev *pdev,
|
||||
struct ahci_host_priv *hpriv)
|
||||
{
|
||||
if (pdev->vendor == PCI_VENDOR_ID_ASMEDIA && pdev->device == 0x1166) {
|
||||
dev_info(&pdev->dev, "ASM1166 has only six ports\n");
|
||||
hpriv->saved_port_map = 0x3f;
|
||||
}
|
||||
|
||||
if (pdev->vendor == PCI_VENDOR_ID_JMICRON && pdev->device == 0x2361) {
|
||||
dev_info(&pdev->dev, "JMB361 has only one port\n");
|
||||
hpriv->force_port_map = 1;
|
||||
@@ -950,11 +963,20 @@ static int ahci_pci_device_resume(struct device *dev)
|
||||
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
static int ahci_configure_dma_masks(struct pci_dev *pdev, int using_dac)
|
||||
static int ahci_configure_dma_masks(struct pci_dev *pdev,
|
||||
struct ahci_host_priv *hpriv)
|
||||
{
|
||||
const int dma_bits = using_dac ? 64 : 32;
|
||||
int dma_bits;
|
||||
int rc;
|
||||
|
||||
if (hpriv->cap & HOST_CAP_64) {
|
||||
dma_bits = 64;
|
||||
if (hpriv->flags & AHCI_HFLAG_43BIT_ONLY)
|
||||
dma_bits = 43;
|
||||
} else {
|
||||
dma_bits = 32;
|
||||
}
|
||||
|
||||
/*
|
||||
* If the device fixup already set the dma_mask to some non-standard
|
||||
* value, don't extend it here. This happens on STA2X11, for example.
|
||||
@@ -1932,7 +1954,7 @@ static int ahci_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
ahci_gtf_filter_workaround(host);
|
||||
|
||||
/* initialize adapter */
|
||||
rc = ahci_configure_dma_masks(pdev, hpriv->cap & HOST_CAP_64);
|
||||
rc = ahci_configure_dma_masks(pdev, hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@
|
||||
|
||||
enum {
|
||||
AHCI_MAX_PORTS = 32,
|
||||
AHCI_MAX_CLKS = 5,
|
||||
AHCI_MAX_SG = 168, /* hardware max is 64K */
|
||||
AHCI_DMA_BOUNDARY = 0xffffffff,
|
||||
AHCI_MAX_CMDS = 32,
|
||||
@@ -244,6 +243,7 @@ enum {
|
||||
AHCI_HFLAG_IGN_NOTSUPP_POWER_ON = BIT(27), /* ignore -EOPNOTSUPP
|
||||
from phy_power_on() */
|
||||
AHCI_HFLAG_NO_SXS = BIT(28), /* SXS not supported */
|
||||
AHCI_HFLAG_43BIT_ONLY = BIT(29), /* 43bit DMA addr limit */
|
||||
|
||||
/* ap->flags bits */
|
||||
|
||||
@@ -342,7 +342,9 @@ struct ahci_host_priv {
|
||||
u32 em_msg_type; /* EM message type */
|
||||
u32 remapped_nvme; /* NVMe remapped device count */
|
||||
bool got_runtime_pm; /* Did we do pm_runtime_get? */
|
||||
struct clk *clks[AHCI_MAX_CLKS]; /* Optional */
|
||||
unsigned int n_clks;
|
||||
struct clk_bulk_data *clks; /* Optional */
|
||||
unsigned int f_rsts;
|
||||
struct reset_control *rsts; /* Optional */
|
||||
struct regulator **target_pwrs; /* Optional */
|
||||
struct regulator *ahci_regulator;/* Optional */
|
||||
|
||||
@@ -88,7 +88,6 @@ struct ceva_ahci_priv {
|
||||
u32 axicc;
|
||||
bool is_cci_enabled;
|
||||
int flags;
|
||||
struct reset_control *rst;
|
||||
};
|
||||
|
||||
static unsigned int ceva_ahci_read_id(struct ata_device *dev,
|
||||
@@ -189,6 +188,60 @@ static struct scsi_host_template ahci_platform_sht = {
|
||||
AHCI_SHT(DRV_NAME),
|
||||
};
|
||||
|
||||
static int ceva_ahci_platform_enable_resources(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
int rc, i;
|
||||
|
||||
rc = ahci_platform_enable_regulators(hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
rc = ahci_platform_enable_clks(hpriv);
|
||||
if (rc)
|
||||
goto disable_regulator;
|
||||
|
||||
/* Assert the controller reset */
|
||||
rc = ahci_platform_assert_rsts(hpriv);
|
||||
if (rc)
|
||||
goto disable_clks;
|
||||
|
||||
for (i = 0; i < hpriv->nports; i++) {
|
||||
rc = phy_init(hpriv->phys[i]);
|
||||
if (rc)
|
||||
goto disable_rsts;
|
||||
}
|
||||
|
||||
/* De-assert the controller reset */
|
||||
ahci_platform_deassert_rsts(hpriv);
|
||||
|
||||
for (i = 0; i < hpriv->nports; i++) {
|
||||
rc = phy_power_on(hpriv->phys[i]);
|
||||
if (rc) {
|
||||
phy_exit(hpriv->phys[i]);
|
||||
goto disable_phys;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
disable_rsts:
|
||||
ahci_platform_deassert_rsts(hpriv);
|
||||
|
||||
disable_phys:
|
||||
while (--i >= 0) {
|
||||
phy_power_off(hpriv->phys[i]);
|
||||
phy_exit(hpriv->phys[i]);
|
||||
}
|
||||
|
||||
disable_clks:
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
|
||||
disable_regulator:
|
||||
ahci_platform_disable_regulators(hpriv);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
static int ceva_ahci_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *np = pdev->dev.of_node;
|
||||
@@ -203,47 +256,19 @@ static int ceva_ahci_probe(struct platform_device *pdev)
|
||||
return -ENOMEM;
|
||||
|
||||
cevapriv->ahci_pdev = pdev;
|
||||
|
||||
cevapriv->rst = devm_reset_control_get_optional_exclusive(&pdev->dev,
|
||||
NULL);
|
||||
if (IS_ERR(cevapriv->rst))
|
||||
dev_err_probe(&pdev->dev, PTR_ERR(cevapriv->rst),
|
||||
"failed to get reset\n");
|
||||
|
||||
hpriv = ahci_platform_get_resources(pdev, 0);
|
||||
if (IS_ERR(hpriv))
|
||||
return PTR_ERR(hpriv);
|
||||
|
||||
if (!cevapriv->rst) {
|
||||
rc = ahci_platform_enable_resources(hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
} else {
|
||||
int i;
|
||||
hpriv->rsts = devm_reset_control_get_optional_exclusive(&pdev->dev,
|
||||
NULL);
|
||||
if (IS_ERR(hpriv->rsts))
|
||||
return dev_err_probe(&pdev->dev, PTR_ERR(hpriv->rsts),
|
||||
"failed to get reset\n");
|
||||
|
||||
rc = ahci_platform_enable_clks(hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
/* Assert the controller reset */
|
||||
reset_control_assert(cevapriv->rst);
|
||||
|
||||
for (i = 0; i < hpriv->nports; i++) {
|
||||
rc = phy_init(hpriv->phys[i]);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/* De-assert the controller reset */
|
||||
reset_control_deassert(cevapriv->rst);
|
||||
|
||||
for (i = 0; i < hpriv->nports; i++) {
|
||||
rc = phy_power_on(hpriv->phys[i]);
|
||||
if (rc) {
|
||||
phy_exit(hpriv->phys[i]);
|
||||
return rc;
|
||||
}
|
||||
}
|
||||
}
|
||||
rc = ceva_ahci_platform_enable_resources(hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
if (of_property_read_bool(np, "ceva,broken-gen2"))
|
||||
cevapriv->flags = CEVA_FLAG_BROKEN_GEN2;
|
||||
@@ -252,52 +277,60 @@ static int ceva_ahci_probe(struct platform_device *pdev)
|
||||
if (of_property_read_u8_array(np, "ceva,p0-cominit-params",
|
||||
(u8 *)&cevapriv->pp2c[0], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p0-cominit-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
if (of_property_read_u8_array(np, "ceva,p1-cominit-params",
|
||||
(u8 *)&cevapriv->pp2c[1], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p1-cominit-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
/* Read OOB timing value for COMWAKE from device-tree*/
|
||||
if (of_property_read_u8_array(np, "ceva,p0-comwake-params",
|
||||
(u8 *)&cevapriv->pp3c[0], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p0-comwake-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
if (of_property_read_u8_array(np, "ceva,p1-comwake-params",
|
||||
(u8 *)&cevapriv->pp3c[1], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p1-comwake-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
/* Read phy BURST timing value from device-tree */
|
||||
if (of_property_read_u8_array(np, "ceva,p0-burst-params",
|
||||
(u8 *)&cevapriv->pp4c[0], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p0-burst-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
if (of_property_read_u8_array(np, "ceva,p1-burst-params",
|
||||
(u8 *)&cevapriv->pp4c[1], 4) < 0) {
|
||||
dev_warn(dev, "ceva,p1-burst-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
/* Read phy RETRY interval timing value from device-tree */
|
||||
if (of_property_read_u16_array(np, "ceva,p0-retry-params",
|
||||
(u16 *)&cevapriv->pp5c[0], 2) < 0) {
|
||||
dev_warn(dev, "ceva,p0-retry-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
if (of_property_read_u16_array(np, "ceva,p1-retry-params",
|
||||
(u16 *)&cevapriv->pp5c[1], 2) < 0) {
|
||||
dev_warn(dev, "ceva,p1-retry-params property not defined\n");
|
||||
return -EINVAL;
|
||||
rc = -EINVAL;
|
||||
goto disable_resources;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -335,7 +368,7 @@ static int __maybe_unused ceva_ahci_resume(struct device *dev)
|
||||
struct ahci_host_priv *hpriv = host->private_data;
|
||||
int rc;
|
||||
|
||||
rc = ahci_platform_enable_resources(hpriv);
|
||||
rc = ceva_ahci_platform_enable_resources(hpriv);
|
||||
if (rc)
|
||||
return rc;
|
||||
|
||||
|
||||
@@ -163,7 +163,6 @@ static int ahci_da850_probe(struct platform_device *pdev)
|
||||
struct ahci_host_priv *hpriv;
|
||||
void __iomem *pwrdn_reg;
|
||||
struct resource *res;
|
||||
struct clk *clk;
|
||||
u32 mpy;
|
||||
int rc;
|
||||
|
||||
@@ -172,36 +171,28 @@ static int ahci_da850_probe(struct platform_device *pdev)
|
||||
return PTR_ERR(hpriv);
|
||||
|
||||
/*
|
||||
* Internally ahci_platform_get_resources() calls clk_get(dev, NULL)
|
||||
* when trying to obtain the functional clock. This SATA controller
|
||||
* uses two clocks for which we specify two connection ids. If we don't
|
||||
* have the functional clock at this point - call clk_get() again with
|
||||
* con_id = "fck".
|
||||
* Internally ahci_platform_get_resources() calls the bulk clocks
|
||||
* get method or falls back to using a single clk_get_optional().
|
||||
* This AHCI SATA controller uses two clocks: functional clock
|
||||
* with "fck" connection id and external reference clock with
|
||||
* "refclk" id. If we haven't got all of them re-try the clocks
|
||||
* getting procedure with the explicitly specified ids.
|
||||
*/
|
||||
if (!hpriv->clks[0]) {
|
||||
clk = clk_get(dev, "fck");
|
||||
if (IS_ERR(clk))
|
||||
return PTR_ERR(clk);
|
||||
if (hpriv->n_clks < 2) {
|
||||
hpriv->clks = devm_kcalloc(dev, 2, sizeof(*hpriv->clks), GFP_KERNEL);
|
||||
if (!hpriv->clks)
|
||||
return -ENOMEM;
|
||||
|
||||
hpriv->clks[0] = clk;
|
||||
hpriv->clks[0].id = "fck";
|
||||
hpriv->clks[1].id = "refclk";
|
||||
hpriv->n_clks = 2;
|
||||
|
||||
rc = devm_clk_bulk_get(dev, hpriv->n_clks, hpriv->clks);
|
||||
if (rc)
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* The second clock used by ahci-da850 is the external REFCLK. If we
|
||||
* didn't get it from ahci_platform_get_resources(), let's try to
|
||||
* specify the con_id in clk_get().
|
||||
*/
|
||||
if (!hpriv->clks[1]) {
|
||||
clk = clk_get(dev, "refclk");
|
||||
if (IS_ERR(clk)) {
|
||||
dev_err(dev, "unable to obtain the reference clock");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
hpriv->clks[1] = clk;
|
||||
}
|
||||
|
||||
mpy = ahci_da850_calculate_mpy(clk_get_rate(hpriv->clks[1]));
|
||||
mpy = ahci_da850_calculate_mpy(clk_get_rate(hpriv->clks[1].clk));
|
||||
if (mpy == 0) {
|
||||
dev_err(dev, "invalid REFCLK multiplier value: 0x%x", mpy);
|
||||
return -EINVAL;
|
||||
|
||||
@@ -69,12 +69,12 @@ static int ahci_dm816_phy_init(struct ahci_host_priv *hpriv, struct device *dev)
|
||||
* keep-alive clock and the external reference clock. We need the
|
||||
* rate of the latter to calculate the correct value of MPY bits.
|
||||
*/
|
||||
if (!hpriv->clks[1]) {
|
||||
if (hpriv->n_clks < 2) {
|
||||
dev_err(dev, "reference clock not supplied\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
refclk_rate = clk_get_rate(hpriv->clks[1]);
|
||||
refclk_rate = clk_get_rate(hpriv->clks[1].clk);
|
||||
if ((refclk_rate % 100) != 0) {
|
||||
dev_err(dev, "reference clock rate must be divisible by 100\n");
|
||||
return -EINVAL;
|
||||
|
||||
@@ -97,28 +97,14 @@ EXPORT_SYMBOL_GPL(ahci_platform_disable_phys);
|
||||
* ahci_platform_enable_clks - Enable platform clocks
|
||||
* @hpriv: host private area to store config values
|
||||
*
|
||||
* This function enables all the clks found in hpriv->clks, starting at
|
||||
* index 0. If any clk fails to enable it disables all the clks already
|
||||
* enabled in reverse order, and then returns an error.
|
||||
* This function enables all the clks found for the AHCI device.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success otherwise a negative error code
|
||||
*/
|
||||
int ahci_platform_enable_clks(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
int c, rc;
|
||||
|
||||
for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++) {
|
||||
rc = clk_prepare_enable(hpriv->clks[c]);
|
||||
if (rc)
|
||||
goto disable_unprepare_clk;
|
||||
}
|
||||
return 0;
|
||||
|
||||
disable_unprepare_clk:
|
||||
while (--c >= 0)
|
||||
clk_disable_unprepare(hpriv->clks[c]);
|
||||
return rc;
|
||||
return clk_bulk_prepare_enable(hpriv->n_clks, hpriv->clks);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ahci_platform_enable_clks);
|
||||
|
||||
@@ -126,19 +112,54 @@ EXPORT_SYMBOL_GPL(ahci_platform_enable_clks);
|
||||
* ahci_platform_disable_clks - Disable platform clocks
|
||||
* @hpriv: host private area to store config values
|
||||
*
|
||||
* This function disables all the clks found in hpriv->clks, in reverse
|
||||
* order of ahci_platform_enable_clks (starting at the end of the array).
|
||||
* This function disables all the clocks enabled before
|
||||
* (bulk-clocks-disable function is supposed to do that in reverse
|
||||
* from the enabling procedure order).
|
||||
*/
|
||||
void ahci_platform_disable_clks(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
int c;
|
||||
|
||||
for (c = AHCI_MAX_CLKS - 1; c >= 0; c--)
|
||||
if (hpriv->clks[c])
|
||||
clk_disable_unprepare(hpriv->clks[c]);
|
||||
clk_bulk_disable_unprepare(hpriv->n_clks, hpriv->clks);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ahci_platform_disable_clks);
|
||||
|
||||
/**
|
||||
* ahci_platform_deassert_rsts - Deassert/trigger platform resets
|
||||
* @hpriv: host private area to store config values
|
||||
*
|
||||
* This function deasserts or triggers all the reset lines found for
|
||||
* the AHCI device.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success otherwise a negative error code
|
||||
*/
|
||||
int ahci_platform_deassert_rsts(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
if (hpriv->f_rsts & AHCI_PLATFORM_RST_TRIGGER)
|
||||
return reset_control_reset(hpriv->rsts);
|
||||
|
||||
return reset_control_deassert(hpriv->rsts);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ahci_platform_deassert_rsts);
|
||||
|
||||
/**
|
||||
* ahci_platform_assert_rsts - Assert/rearm platform resets
|
||||
* @hpriv: host private area to store config values
|
||||
*
|
||||
* This function asserts or rearms (for self-deasserting resets) all
|
||||
* the reset controls found for the AHCI device.
|
||||
*
|
||||
* RETURNS:
|
||||
* 0 on success otherwise a negative error code
|
||||
*/
|
||||
int ahci_platform_assert_rsts(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
if (hpriv->f_rsts & AHCI_PLATFORM_RST_TRIGGER)
|
||||
return reset_control_rearm(hpriv->rsts);
|
||||
|
||||
return reset_control_assert(hpriv->rsts);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(ahci_platform_assert_rsts);
|
||||
|
||||
/**
|
||||
* ahci_platform_enable_regulators - Enable regulators
|
||||
* @hpriv: host private area to store config values
|
||||
@@ -236,18 +257,18 @@ int ahci_platform_enable_resources(struct ahci_host_priv *hpriv)
|
||||
if (rc)
|
||||
goto disable_regulator;
|
||||
|
||||
rc = reset_control_deassert(hpriv->rsts);
|
||||
rc = ahci_platform_deassert_rsts(hpriv);
|
||||
if (rc)
|
||||
goto disable_clks;
|
||||
|
||||
rc = ahci_platform_enable_phys(hpriv);
|
||||
if (rc)
|
||||
goto disable_resets;
|
||||
goto disable_rsts;
|
||||
|
||||
return 0;
|
||||
|
||||
disable_resets:
|
||||
reset_control_assert(hpriv->rsts);
|
||||
disable_rsts:
|
||||
ahci_platform_assert_rsts(hpriv);
|
||||
|
||||
disable_clks:
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
@@ -274,7 +295,7 @@ void ahci_platform_disable_resources(struct ahci_host_priv *hpriv)
|
||||
{
|
||||
ahci_platform_disable_phys(hpriv);
|
||||
|
||||
reset_control_assert(hpriv->rsts);
|
||||
ahci_platform_assert_rsts(hpriv);
|
||||
|
||||
ahci_platform_disable_clks(hpriv);
|
||||
|
||||
@@ -292,8 +313,6 @@ static void ahci_platform_put_resources(struct device *dev, void *res)
|
||||
pm_runtime_disable(dev);
|
||||
}
|
||||
|
||||
for (c = 0; c < AHCI_MAX_CLKS && hpriv->clks[c]; c++)
|
||||
clk_put(hpriv->clks[c]);
|
||||
/*
|
||||
* The regulators are tied to child node device and not to the
|
||||
* SATA device itself. So we can't use devm for automatically
|
||||
@@ -374,8 +393,8 @@ static int ahci_platform_get_regulator(struct ahci_host_priv *hpriv, u32 port,
|
||||
* 1) mmio registers (IORESOURCE_MEM 0, mandatory)
|
||||
* 2) regulator for controlling the targets power (optional)
|
||||
* regulator for controlling the AHCI controller (optional)
|
||||
* 3) 0 - AHCI_MAX_CLKS clocks, as specified in the devs devicetree node,
|
||||
* or for non devicetree enabled platforms a single clock
|
||||
* 3) all clocks specified in the devicetree node, or a single
|
||||
* clock for non-OF platforms (optional)
|
||||
* 4) resets, if flags has AHCI_PLATFORM_GET_RESETS (optional)
|
||||
* 5) phys (optional)
|
||||
*
|
||||
@@ -385,11 +404,10 @@ static int ahci_platform_get_regulator(struct ahci_host_priv *hpriv, u32 port,
|
||||
struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
|
||||
unsigned int flags)
|
||||
{
|
||||
int child_nodes, rc = -ENOMEM, enabled_ports = 0;
|
||||
struct device *dev = &pdev->dev;
|
||||
struct ahci_host_priv *hpriv;
|
||||
struct clk *clk;
|
||||
struct device_node *child;
|
||||
int i, enabled_ports = 0, rc = -ENOMEM, child_nodes;
|
||||
u32 mask_port_map = 0;
|
||||
|
||||
if (!devres_open_group(dev, NULL, GFP_KERNEL))
|
||||
@@ -409,25 +427,38 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
for (i = 0; i < AHCI_MAX_CLKS; i++) {
|
||||
/*
|
||||
* For now we must use clk_get(dev, NULL) for the first clock,
|
||||
* because some platforms (da850, spear13xx) are not yet
|
||||
* converted to use devicetree for clocks. For new platforms
|
||||
* this is equivalent to of_clk_get(dev->of_node, 0).
|
||||
*/
|
||||
if (i == 0)
|
||||
clk = clk_get(dev, NULL);
|
||||
else
|
||||
clk = of_clk_get(dev->of_node, i);
|
||||
/*
|
||||
* Bulk clocks getting procedure can fail to find any clock due to
|
||||
* running on a non-OF platform or due to the clocks being defined in
|
||||
* bypass of the DT firmware (like da850, spear13xx). In that case we
|
||||
* fallback to getting a single clock source right from the dev clocks
|
||||
* list.
|
||||
*/
|
||||
rc = devm_clk_bulk_get_all(dev, &hpriv->clks);
|
||||
if (rc < 0)
|
||||
goto err_out;
|
||||
|
||||
if (IS_ERR(clk)) {
|
||||
rc = PTR_ERR(clk);
|
||||
if (rc == -EPROBE_DEFER)
|
||||
goto err_out;
|
||||
break;
|
||||
if (rc > 0) {
|
||||
/* Got clocks in bulk */
|
||||
hpriv->n_clks = rc;
|
||||
} else {
|
||||
/*
|
||||
* No clock bulk found: fallback to manually getting
|
||||
* the optional clock.
|
||||
*/
|
||||
hpriv->clks = devm_kzalloc(dev, sizeof(*hpriv->clks), GFP_KERNEL);
|
||||
if (!hpriv->clks) {
|
||||
rc = -ENOMEM;
|
||||
goto err_out;
|
||||
}
|
||||
hpriv->clks->clk = devm_clk_get_optional(dev, NULL);
|
||||
if (IS_ERR(hpriv->clks->clk)) {
|
||||
rc = PTR_ERR(hpriv->clks->clk);
|
||||
goto err_out;
|
||||
} else if (hpriv->clks->clk) {
|
||||
hpriv->clks->id = "ahci";
|
||||
hpriv->n_clks = 1;
|
||||
}
|
||||
hpriv->clks[i] = clk;
|
||||
}
|
||||
|
||||
hpriv->ahci_regulator = devm_regulator_get(dev, "ahci");
|
||||
@@ -449,6 +480,8 @@ struct ahci_host_priv *ahci_platform_get_resources(struct platform_device *pdev,
|
||||
rc = PTR_ERR(hpriv->rsts);
|
||||
goto err_out;
|
||||
}
|
||||
|
||||
hpriv->f_rsts = flags & AHCI_PLATFORM_RST_TRIGGER;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -420,13 +420,16 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff_head *qu
|
||||
rcu_read_lock();
|
||||
for_each_netdev_rcu(&init_net, ifp) {
|
||||
dev_hold(ifp);
|
||||
if (!is_aoe_netif(ifp))
|
||||
goto cont;
|
||||
if (!is_aoe_netif(ifp)) {
|
||||
dev_put(ifp);
|
||||
continue;
|
||||
}
|
||||
|
||||
skb = new_skb(sizeof *h + sizeof *ch);
|
||||
if (skb == NULL) {
|
||||
printk(KERN_INFO "aoe: skb alloc failure\n");
|
||||
goto cont;
|
||||
dev_put(ifp);
|
||||
continue;
|
||||
}
|
||||
skb_put(skb, sizeof *h + sizeof *ch);
|
||||
skb->dev = ifp;
|
||||
@@ -441,9 +444,6 @@ aoecmd_cfg_pkts(ushort aoemajor, unsigned char aoeminor, struct sk_buff_head *qu
|
||||
h->major = cpu_to_be16(aoemajor);
|
||||
h->minor = aoeminor;
|
||||
h->cmd = AOECMD_CFG;
|
||||
|
||||
cont:
|
||||
dev_put(ifp);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
@@ -64,6 +64,7 @@ tx(int id) __must_hold(&txlock)
|
||||
pr_warn("aoe: packet could not be sent on %s. %s\n",
|
||||
ifp ? ifp->name : "netif",
|
||||
"consider increasing tx_queue_len");
|
||||
dev_put(ifp);
|
||||
spin_lock_irq(&txlock);
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -1715,7 +1715,8 @@ static struct nbd_device *nbd_dev_add(int index, unsigned int refs)
|
||||
if (err == -ENOSPC)
|
||||
err = -EEXIST;
|
||||
} else {
|
||||
err = idr_alloc(&nbd_index_idr, nbd, 0, 0, GFP_KERNEL);
|
||||
err = idr_alloc(&nbd_index_idr, nbd, 0,
|
||||
(MINORMASK >> part_shift) + 1, GFP_KERNEL);
|
||||
if (err >= 0)
|
||||
index = err;
|
||||
}
|
||||
@@ -2343,6 +2344,12 @@ static int nbd_genl_status(struct sk_buff *skb, struct genl_info *info)
|
||||
}
|
||||
|
||||
dev_list = nla_nest_start_noflag(reply, NBD_ATTR_DEVICE_LIST);
|
||||
if (!dev_list) {
|
||||
nlmsg_free(reply);
|
||||
ret = -EMSGSIZE;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if (index == -1) {
|
||||
ret = idr_for_each(&nbd_index_idr, &status_cb, reply);
|
||||
if (ret) {
|
||||
|
||||
@@ -991,14 +991,15 @@ static int virtblk_freeze(struct virtio_device *vdev)
|
||||
{
|
||||
struct virtio_blk *vblk = vdev->priv;
|
||||
|
||||
/* Ensure no requests in virtqueues before deleting vqs. */
|
||||
blk_mq_freeze_queue(vblk->disk->queue);
|
||||
|
||||
/* Ensure we don't receive any more interrupts */
|
||||
vdev->config->reset(vdev);
|
||||
|
||||
/* Make sure no work handler is accessing the device. */
|
||||
flush_work(&vblk->config_work);
|
||||
|
||||
blk_mq_quiesce_queue(vblk->disk->queue);
|
||||
|
||||
vdev->config->del_vqs(vdev);
|
||||
kfree(vblk->vqs);
|
||||
|
||||
@@ -1016,7 +1017,7 @@ static int virtblk_restore(struct virtio_device *vdev)
|
||||
|
||||
virtio_device_ready(vdev);
|
||||
|
||||
blk_mq_unquiesce_queue(vblk->disk->queue);
|
||||
blk_mq_unfreeze_queue(vblk->disk->queue);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -566,6 +566,9 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
config.type = ELF_TYPE_PATCH;
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/msbtfw%02x.mbn", rom_ver);
|
||||
} else if (soc_type == QCA_WCN6855) {
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/hpbtfw%02x.tlv", rom_ver);
|
||||
} else {
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/rampatch_%08x.bin", soc_ver);
|
||||
@@ -600,6 +603,9 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
else if (soc_type == QCA_WCN6750)
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/msnv%02x.bin", rom_ver);
|
||||
else if (soc_type == QCA_WCN6855)
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/hpnv%02x.bin", rom_ver);
|
||||
else
|
||||
snprintf(config.fwname, sizeof(config.fwname),
|
||||
"qca/nvm_%08x.bin", soc_ver);
|
||||
@@ -637,11 +643,17 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
|
||||
return err;
|
||||
}
|
||||
|
||||
if (soc_type == QCA_WCN3991 || soc_type == QCA_WCN6750) {
|
||||
switch (soc_type) {
|
||||
case QCA_WCN3991:
|
||||
case QCA_WCN6750:
|
||||
case QCA_WCN6855:
|
||||
/* get fw build info */
|
||||
err = qca_read_fw_build_info(hdev);
|
||||
if (err < 0)
|
||||
return err;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
bt_dev_info(hdev, "QCA setup on UART is completed");
|
||||
|
||||
@@ -145,6 +145,7 @@ enum qca_btsoc_type {
|
||||
QCA_WCN3991,
|
||||
QCA_QCA6390,
|
||||
QCA_WCN6750,
|
||||
QCA_WCN6855,
|
||||
};
|
||||
|
||||
#if IS_ENABLED(CONFIG_BT_QCA)
|
||||
@@ -166,6 +167,10 @@ static inline bool qca_is_wcn6750(enum qca_btsoc_type soc_type)
|
||||
{
|
||||
return soc_type == QCA_WCN6750;
|
||||
}
|
||||
static inline bool qca_is_wcn6855(enum qca_btsoc_type soc_type)
|
||||
{
|
||||
return soc_type == QCA_WCN6855;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
@@ -204,6 +209,11 @@ static inline bool qca_is_wcn6750(enum qca_btsoc_type soc_type)
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline bool qca_is_wcn6855(enum qca_btsoc_type soc_type)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline int qca_send_pre_shutdown_cmd(struct hci_dev *hdev)
|
||||
{
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -1315,7 +1315,8 @@ static int qca_set_baudrate(struct hci_dev *hdev, uint8_t baudrate)
|
||||
|
||||
/* Give the controller time to process the request */
|
||||
if (qca_is_wcn399x(qca_soc_type(hu)) ||
|
||||
qca_is_wcn6750(qca_soc_type(hu)))
|
||||
qca_is_wcn6750(qca_soc_type(hu)) ||
|
||||
qca_is_wcn6855(qca_soc_type(hu)))
|
||||
usleep_range(1000, 10000);
|
||||
else
|
||||
msleep(300);
|
||||
@@ -1392,7 +1393,8 @@ static unsigned int qca_get_speed(struct hci_uart *hu,
|
||||
static int qca_check_speeds(struct hci_uart *hu)
|
||||
{
|
||||
if (qca_is_wcn399x(qca_soc_type(hu)) ||
|
||||
qca_is_wcn6750(qca_soc_type(hu))) {
|
||||
qca_is_wcn6750(qca_soc_type(hu)) ||
|
||||
qca_is_wcn6855(qca_soc_type(hu))) {
|
||||
if (!qca_get_speed(hu, QCA_INIT_SPEED) &&
|
||||
!qca_get_speed(hu, QCA_OPER_SPEED))
|
||||
return -EINVAL;
|
||||
@@ -1426,7 +1428,8 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
|
||||
* changing the baudrate of chip and host.
|
||||
*/
|
||||
if (qca_is_wcn399x(soc_type) ||
|
||||
qca_is_wcn6750(soc_type))
|
||||
qca_is_wcn6750(soc_type) ||
|
||||
qca_is_wcn6855(soc_type))
|
||||
hci_uart_set_flow_control(hu, true);
|
||||
|
||||
if (soc_type == QCA_WCN3990) {
|
||||
@@ -1444,7 +1447,8 @@ static int qca_set_speed(struct hci_uart *hu, enum qca_speed_type speed_type)
|
||||
|
||||
error:
|
||||
if (qca_is_wcn399x(soc_type) ||
|
||||
qca_is_wcn6750(soc_type))
|
||||
qca_is_wcn6750(soc_type) ||
|
||||
qca_is_wcn6855(soc_type))
|
||||
hci_uart_set_flow_control(hu, false);
|
||||
|
||||
if (soc_type == QCA_WCN3990) {
|
||||
@@ -1680,7 +1684,8 @@ static int qca_power_on(struct hci_dev *hdev)
|
||||
return 0;
|
||||
|
||||
if (qca_is_wcn399x(soc_type) ||
|
||||
qca_is_wcn6750(soc_type)) {
|
||||
qca_is_wcn6750(soc_type) ||
|
||||
qca_is_wcn6855(soc_type)) {
|
||||
ret = qca_regulator_init(hu);
|
||||
} else {
|
||||
qcadev = serdev_device_get_drvdata(hu->serdev);
|
||||
@@ -1721,7 +1726,8 @@ static int qca_setup(struct hci_uart *hu)
|
||||
|
||||
bt_dev_info(hdev, "setting up %s",
|
||||
qca_is_wcn399x(soc_type) ? "wcn399x" :
|
||||
(soc_type == QCA_WCN6750) ? "wcn6750" : "ROME/QCA6390");
|
||||
(soc_type == QCA_WCN6750) ? "wcn6750" :
|
||||
(soc_type == QCA_WCN6855) ? "wcn6855" : "ROME/QCA6390");
|
||||
|
||||
qca->memdump_state = QCA_MEMDUMP_IDLE;
|
||||
|
||||
@@ -1733,7 +1739,8 @@ retry:
|
||||
clear_bit(QCA_SSR_TRIGGERED, &qca->flags);
|
||||
|
||||
if (qca_is_wcn399x(soc_type) ||
|
||||
qca_is_wcn6750(soc_type)) {
|
||||
qca_is_wcn6750(soc_type) ||
|
||||
qca_is_wcn6855(soc_type)) {
|
||||
set_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
|
||||
|
||||
ret = qca_read_soc_version(hdev, &ver, soc_type);
|
||||
@@ -1754,7 +1761,8 @@ retry:
|
||||
}
|
||||
|
||||
if (!(qca_is_wcn399x(soc_type) ||
|
||||
qca_is_wcn6750(soc_type))) {
|
||||
qca_is_wcn6750(soc_type) ||
|
||||
qca_is_wcn6855(soc_type))) {
|
||||
/* Get QCA version information */
|
||||
ret = qca_read_soc_version(hdev, &ver, soc_type);
|
||||
if (ret)
|
||||
@@ -1880,6 +1888,20 @@ static const struct qca_device_data qca_soc_data_wcn6750 = {
|
||||
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
|
||||
};
|
||||
|
||||
static const struct qca_device_data qca_soc_data_wcn6855 = {
|
||||
.soc_type = QCA_WCN6855,
|
||||
.vregs = (struct qca_vreg []) {
|
||||
{ "vddio", 5000 },
|
||||
{ "vddbtcxmx", 126000 },
|
||||
{ "vddrfacmn", 12500 },
|
||||
{ "vddrfa0p8", 102000 },
|
||||
{ "vddrfa1p7", 302000 },
|
||||
{ "vddrfa1p2", 257000 },
|
||||
},
|
||||
.num_vregs = 6,
|
||||
.capabilities = QCA_CAP_WIDEBAND_SPEECH | QCA_CAP_VALID_LE_STATES,
|
||||
};
|
||||
|
||||
static void qca_power_shutdown(struct hci_uart *hu)
|
||||
{
|
||||
struct qca_serdev *qcadev;
|
||||
@@ -1909,7 +1931,7 @@ static void qca_power_shutdown(struct hci_uart *hu)
|
||||
host_set_baudrate(hu, 2400);
|
||||
qca_send_power_pulse(hu, false);
|
||||
qca_regulator_disable(qcadev);
|
||||
} else if (soc_type == QCA_WCN6750) {
|
||||
} else if (soc_type == QCA_WCN6750 || soc_type == QCA_WCN6855) {
|
||||
gpiod_set_value_cansleep(qcadev->bt_en, 0);
|
||||
msleep(100);
|
||||
qca_regulator_disable(qcadev);
|
||||
@@ -2044,7 +2066,8 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||
|
||||
if (data &&
|
||||
(qca_is_wcn399x(data->soc_type) ||
|
||||
qca_is_wcn6750(data->soc_type))) {
|
||||
qca_is_wcn6750(data->soc_type) ||
|
||||
qca_is_wcn6855(data->soc_type))) {
|
||||
qcadev->btsoc_type = data->soc_type;
|
||||
qcadev->bt_power = devm_kzalloc(&serdev->dev,
|
||||
sizeof(struct qca_power),
|
||||
@@ -2064,14 +2087,18 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||
|
||||
qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR_OR_NULL(qcadev->bt_en) && data->soc_type == QCA_WCN6750) {
|
||||
if (IS_ERR(qcadev->bt_en) &&
|
||||
(data->soc_type == QCA_WCN6750 ||
|
||||
data->soc_type == QCA_WCN6855)) {
|
||||
dev_err(&serdev->dev, "failed to acquire BT_EN gpio\n");
|
||||
power_ctrl_enabled = false;
|
||||
}
|
||||
|
||||
qcadev->sw_ctrl = devm_gpiod_get_optional(&serdev->dev, "swctrl",
|
||||
GPIOD_IN);
|
||||
if (IS_ERR_OR_NULL(qcadev->sw_ctrl) && data->soc_type == QCA_WCN6750)
|
||||
if (IS_ERR(qcadev->sw_ctrl) &&
|
||||
(data->soc_type == QCA_WCN6750 ||
|
||||
data->soc_type == QCA_WCN6855))
|
||||
dev_warn(&serdev->dev, "failed to acquire SW_CTRL gpio\n");
|
||||
|
||||
qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL);
|
||||
@@ -2093,7 +2120,7 @@ static int qca_serdev_probe(struct serdev_device *serdev)
|
||||
|
||||
qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable",
|
||||
GPIOD_OUT_LOW);
|
||||
if (IS_ERR_OR_NULL(qcadev->bt_en)) {
|
||||
if (IS_ERR(qcadev->bt_en)) {
|
||||
dev_warn(&serdev->dev, "failed to acquire enable gpio\n");
|
||||
power_ctrl_enabled = false;
|
||||
}
|
||||
@@ -2147,8 +2174,9 @@ static void qca_serdev_remove(struct serdev_device *serdev)
|
||||
struct qca_power *power = qcadev->bt_power;
|
||||
|
||||
if ((qca_is_wcn399x(qcadev->btsoc_type) ||
|
||||
qca_is_wcn6750(qcadev->btsoc_type)) &&
|
||||
power->vregs_on)
|
||||
qca_is_wcn6750(qcadev->btsoc_type) ||
|
||||
qca_is_wcn6855(qcadev->btsoc_type)) &&
|
||||
power->vregs_on)
|
||||
qca_power_shutdown(&qcadev->serdev_hu);
|
||||
else if (qcadev->susclk)
|
||||
clk_disable_unprepare(qcadev->susclk);
|
||||
@@ -2332,6 +2360,7 @@ static const struct of_device_id qca_bluetooth_of_match[] = {
|
||||
{ .compatible = "qcom,wcn3991-bt", .data = &qca_soc_data_wcn3991},
|
||||
{ .compatible = "qcom,wcn3998-bt", .data = &qca_soc_data_wcn3998},
|
||||
{ .compatible = "qcom,wcn6750-bt", .data = &qca_soc_data_wcn6750},
|
||||
{ .compatible = "qcom,wcn6855-bt", .data = &qca_soc_data_wcn6855},
|
||||
{ /* sentinel */ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, qca_bluetooth_of_match);
|
||||
|
||||
@@ -175,11 +175,12 @@ config SUNXI_RSB
|
||||
|
||||
config TEGRA_ACONNECT
|
||||
tristate "Tegra ACONNECT Bus Driver"
|
||||
depends on ARCH_TEGRA_210_SOC
|
||||
depends on ARCH_TEGRA
|
||||
depends on OF && PM
|
||||
help
|
||||
Driver for the Tegra ACONNECT bus which is used to interface with
|
||||
the devices inside the Audio Processing Engine (APE) for Tegra210.
|
||||
the devices inside the Audio Processing Engine (APE) for
|
||||
Tegra210 and later.
|
||||
|
||||
config TEGRA_GMI
|
||||
tristate "Tegra Generic Memory Interface bus driver"
|
||||
|
||||
@@ -253,6 +253,17 @@ static bool clk_core_is_enabled(struct clk_core *core)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* This could be called with the enable lock held, or from atomic
|
||||
* context. If the parent isn't enabled already, we can't do
|
||||
* anything here. We can also assume this clock isn't enabled.
|
||||
*/
|
||||
if ((core->flags & CLK_OPS_PARENT_ENABLE) && core->parent)
|
||||
if (!clk_core_is_enabled(core->parent)) {
|
||||
ret = false;
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = core->ops->is_enabled(core->hw);
|
||||
done:
|
||||
if (core->rpm_enabled)
|
||||
@@ -416,6 +427,9 @@ static struct clk_core *clk_core_get(struct clk_core *core, u8 p_index)
|
||||
if (IS_ERR(hw))
|
||||
return ERR_CAST(hw);
|
||||
|
||||
if (!hw)
|
||||
return NULL;
|
||||
|
||||
return hw->core;
|
||||
}
|
||||
|
||||
|
||||
@@ -130,7 +130,7 @@ static void hi3519_clk_unregister(struct platform_device *pdev)
|
||||
of_clk_del_provider(pdev->dev.of_node);
|
||||
|
||||
hisi_clk_unregister_gate(hi3519_gate_clks,
|
||||
ARRAY_SIZE(hi3519_mux_clks),
|
||||
ARRAY_SIZE(hi3519_gate_clks),
|
||||
crg->clk_data);
|
||||
hisi_clk_unregister_mux(hi3519_mux_clks,
|
||||
ARRAY_SIZE(hi3519_mux_clks),
|
||||
|
||||
@@ -491,7 +491,6 @@ static void hisi_clk_register_pll(struct hi3559av100_pll_clock *clks,
|
||||
|
||||
clk = clk_register(NULL, &p_clk->hw);
|
||||
if (IS_ERR(clk)) {
|
||||
devm_kfree(dev, p_clk);
|
||||
dev_err(dev, "%s: failed to register clock %s\n",
|
||||
__func__, clks[i].name);
|
||||
continue;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
|
||||
static u32 share_count_nand;
|
||||
static u32 share_count_media;
|
||||
static u32 share_count_usb;
|
||||
|
||||
static const char * const pll_ref_sels[] = { "osc_24m", "dummy", "dummy", "dummy", };
|
||||
static const char * const audio_pll1_bypass_sels[] = {"audio_pll1", "audio_pll1_ref_sel", };
|
||||
@@ -354,7 +355,7 @@ static const char * const imx8mp_media_mipi_phy1_ref_sels[] = {"osc_24m", "sys_p
|
||||
"clk_ext2", "audio_pll2_out",
|
||||
"video_pll1_out", };
|
||||
|
||||
static const char * const imx8mp_media_disp1_pix_sels[] = {"osc_24m", "video_pll1_out", "audio_pll2_out",
|
||||
static const char * const imx8mp_media_disp_pix_sels[] = {"osc_24m", "video_pll1_out", "audio_pll2_out",
|
||||
"audio_pll1_out", "sys_pll1_800m",
|
||||
"sys_pll2_1000m", "sys_pll3_out", "clk_ext4", };
|
||||
|
||||
@@ -395,6 +396,11 @@ static const char * const imx8mp_sai7_sels[] = {"osc_24m", "audio_pll1_out", "au
|
||||
|
||||
static const char * const imx8mp_dram_core_sels[] = {"dram_pll_out", "dram_alt_root", };
|
||||
|
||||
static const char * const imx8mp_clkout_sels[] = {"audio_pll1_out", "audio_pll2_out", "video_pll1_out",
|
||||
"dummy", "dummy", "gpu_pll_out", "vpu_pll_out",
|
||||
"arm_pll_out", "sys_pll1", "sys_pll2", "sys_pll3",
|
||||
"dummy", "dummy", "osc_24m", "dummy", "osc_32k"};
|
||||
|
||||
static struct clk_hw **hws;
|
||||
static struct clk_hw_onecell_data *clk_hw_data;
|
||||
|
||||
@@ -513,6 +519,15 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
|
||||
hws[IMX8MP_SYS_PLL2_500M] = imx_clk_hw_fixed_factor("sys_pll2_500m", "sys_pll2_500m_cg", 1, 2);
|
||||
hws[IMX8MP_SYS_PLL2_1000M] = imx_clk_hw_fixed_factor("sys_pll2_1000m", "sys_pll2_out", 1, 1);
|
||||
|
||||
hws[IMX8MP_CLK_CLKOUT1_SEL] = imx_clk_hw_mux2("clkout1_sel", anatop_base + 0x128, 4, 4,
|
||||
imx8mp_clkout_sels, ARRAY_SIZE(imx8mp_clkout_sels));
|
||||
hws[IMX8MP_CLK_CLKOUT1_DIV] = imx_clk_hw_divider("clkout1_div", "clkout1_sel", anatop_base + 0x128, 0, 4);
|
||||
hws[IMX8MP_CLK_CLKOUT1] = imx_clk_hw_gate("clkout1", "clkout1_div", anatop_base + 0x128, 8);
|
||||
hws[IMX8MP_CLK_CLKOUT2_SEL] = imx_clk_hw_mux2("clkout2_sel", anatop_base + 0x128, 20, 4,
|
||||
imx8mp_clkout_sels, ARRAY_SIZE(imx8mp_clkout_sels));
|
||||
hws[IMX8MP_CLK_CLKOUT2_DIV] = imx_clk_hw_divider("clkout2_div", "clkout2_sel", anatop_base + 0x128, 16, 4);
|
||||
hws[IMX8MP_CLK_CLKOUT2] = imx_clk_hw_gate("clkout2", "clkout2_div", anatop_base + 0x128, 24);
|
||||
|
||||
hws[IMX8MP_CLK_A53_DIV] = imx8m_clk_hw_composite_core("arm_a53_div", imx8mp_a53_sels, ccm_base + 0x8000);
|
||||
hws[IMX8MP_CLK_A53_SRC] = hws[IMX8MP_CLK_A53_DIV];
|
||||
hws[IMX8MP_CLK_A53_CG] = hws[IMX8MP_CLK_A53_DIV];
|
||||
@@ -547,6 +562,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
|
||||
hws[IMX8MP_CLK_AHB] = imx8m_clk_hw_composite_bus_critical("ahb_root", imx8mp_ahb_sels, ccm_base + 0x9000);
|
||||
hws[IMX8MP_CLK_AUDIO_AHB] = imx8m_clk_hw_composite_bus("audio_ahb", imx8mp_audio_ahb_sels, ccm_base + 0x9100);
|
||||
hws[IMX8MP_CLK_MIPI_DSI_ESC_RX] = imx8m_clk_hw_composite_bus("mipi_dsi_esc_rx", imx8mp_mipi_dsi_esc_rx_sels, ccm_base + 0x9200);
|
||||
hws[IMX8MP_CLK_MEDIA_DISP2_PIX] = imx8m_clk_hw_composite("media_disp2_pix", imx8mp_media_disp_pix_sels, ccm_base + 0x9300);
|
||||
|
||||
hws[IMX8MP_CLK_IPG_ROOT] = imx_clk_hw_divider2("ipg_root", "ahb_root", ccm_base + 0x9080, 0, 1);
|
||||
|
||||
@@ -608,7 +624,7 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
|
||||
hws[IMX8MP_CLK_USDHC3] = imx8m_clk_hw_composite("usdhc3", imx8mp_usdhc3_sels, ccm_base + 0xbc80);
|
||||
hws[IMX8MP_CLK_MEDIA_CAM1_PIX] = imx8m_clk_hw_composite("media_cam1_pix", imx8mp_media_cam1_pix_sels, ccm_base + 0xbd00);
|
||||
hws[IMX8MP_CLK_MEDIA_MIPI_PHY1_REF] = imx8m_clk_hw_composite("media_mipi_phy1_ref", imx8mp_media_mipi_phy1_ref_sels, ccm_base + 0xbd80);
|
||||
hws[IMX8MP_CLK_MEDIA_DISP1_PIX] = imx8m_clk_hw_composite("media_disp1_pix", imx8mp_media_disp1_pix_sels, ccm_base + 0xbe00);
|
||||
hws[IMX8MP_CLK_MEDIA_DISP1_PIX] = imx8m_clk_hw_composite("media_disp1_pix", imx8mp_media_disp_pix_sels, ccm_base + 0xbe00);
|
||||
hws[IMX8MP_CLK_MEDIA_CAM2_PIX] = imx8m_clk_hw_composite("media_cam2_pix", imx8mp_media_cam2_pix_sels, ccm_base + 0xbe80);
|
||||
hws[IMX8MP_CLK_MEDIA_LDB] = imx8m_clk_hw_composite("media_ldb", imx8mp_media_ldb_sels, ccm_base + 0xbf00);
|
||||
hws[IMX8MP_CLK_MEMREPAIR] = imx8m_clk_hw_composite_critical("mem_repair", imx8mp_memrepair_sels, ccm_base + 0xbf80);
|
||||
@@ -667,7 +683,8 @@ static int imx8mp_clocks_probe(struct platform_device *pdev)
|
||||
hws[IMX8MP_CLK_UART2_ROOT] = imx_clk_hw_gate4("uart2_root_clk", "uart2", ccm_base + 0x44a0, 0);
|
||||
hws[IMX8MP_CLK_UART3_ROOT] = imx_clk_hw_gate4("uart3_root_clk", "uart3", ccm_base + 0x44b0, 0);
|
||||
hws[IMX8MP_CLK_UART4_ROOT] = imx_clk_hw_gate4("uart4_root_clk", "uart4", ccm_base + 0x44c0, 0);
|
||||
hws[IMX8MP_CLK_USB_ROOT] = imx_clk_hw_gate4("usb_root_clk", "hsio_axi", ccm_base + 0x44d0, 0);
|
||||
hws[IMX8MP_CLK_USB_ROOT] = imx_clk_hw_gate2_shared2("usb_root_clk", "hsio_axi", ccm_base + 0x44d0, 0, &share_count_usb);
|
||||
hws[IMX8MP_CLK_USB_SUSP] = imx_clk_hw_gate2_shared2("usb_suspend_clk", "osc_32k", ccm_base + 0x44d0, 0, &share_count_usb);
|
||||
hws[IMX8MP_CLK_USB_PHY_ROOT] = imx_clk_hw_gate4("usb_phy_root_clk", "usb_phy_ref", ccm_base + 0x44f0, 0);
|
||||
hws[IMX8MP_CLK_USDHC1_ROOT] = imx_clk_hw_gate4("usdhc1_root_clk", "usdhc1", ccm_base + 0x4510, 0);
|
||||
hws[IMX8MP_CLK_USDHC2_ROOT] = imx_clk_hw_gate4("usdhc2_root_clk", "usdhc2", ccm_base + 0x4520, 0);
|
||||
|
||||
@@ -201,9 +201,10 @@ static int __init imx_clk_disable_uart(void)
|
||||
clk_disable_unprepare(imx_uart_clocks[i]);
|
||||
clk_put(imx_uart_clocks[i]);
|
||||
}
|
||||
kfree(imx_uart_clocks);
|
||||
}
|
||||
|
||||
kfree(imx_uart_clocks);
|
||||
|
||||
return 0;
|
||||
}
|
||||
late_initcall_sync(imx_clk_disable_uart);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user