mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-24 07:31:41 +00:00
Char/Misc driver patches for 4.18-rc1
Here is the "big" char and misc driver patches for 4.18-rc1. It's not a lot of stuff here, but there are some highlights: - coreboot driver updates - soundwire driver updates - android binder updates - fpga big sync, mostly documentation - lots of minor driver updates All of these have been in linux-next for a while with no reported issues. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> -----BEGIN PGP SIGNATURE----- iG0EABECAC0WIQT0tgzFv3jCIUoxPcsxR9QN2y37KQUCWxbXfQ8cZ3JlZ0Brcm9h aC5jb20ACgkQMUfUDdst+ymwCACdFbUy2kWwrpZWSfSBpawfrs75lLMAmwVOe+62 9aDsDWzDVUEFxF20qiE6 =CMJ3 -----END PGP SIGNATURE----- Merge tag 'char-misc-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc Pull char/misc driver updates from Greg KH: "Here is the "big" char and misc driver patches for 4.18-rc1. It's not a lot of stuff here, but there are some highlights: - coreboot driver updates - soundwire driver updates - android binder updates - fpga big sync, mostly documentation - lots of minor driver updates All of these have been in linux-next for a while with no reported issues" * tag 'char-misc-4.18-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc: (81 commits) vmw_balloon: fixing double free when batching mode is off MAINTAINERS: Add driver-api/fpga path fpga: clarify that unregister functions also free documentation: fpga: move fpga-region.txt to driver-api documentation: fpga: add bridge document to driver-api documentation: fpga: move fpga-mgr.txt to driver-api Documentation: fpga: move fpga overview to driver-api fpga: region: kernel-doc fixes fpga: bridge: kernel-doc fixes fpga: mgr: kernel-doc fixes fpga: use SPDX fpga: region: change api, add fpga_region_create/free fpga: bridge: change api, don't use drvdata fpga: manager: change api, don't use drvdata fpga: region: don't use drvdata in common fpga code Drivers: hv: vmbus: Removed an unnecessary cast from void * ver_linux: Drop redundant calls to system() to test if file is readable ver_linux: Move stderr redirection from function parameter to function body misc: IBM Virtual Management Channel Driver (VMC) rpmsg: Correct support for MODULE_DEVICE_TABLE() ...
This commit is contained in:
commit
abf7dba7c4
132 changed files with 8983 additions and 1236 deletions
|
@ -113,6 +113,20 @@ config IBM_ASM
|
|||
for information on the specific driver level and support statement
|
||||
for your IBM server.
|
||||
|
||||
config IBMVMC
|
||||
tristate "IBM Virtual Management Channel support"
|
||||
depends on PPC_PSERIES
|
||||
help
|
||||
This is the IBM POWER Virtual Management Channel
|
||||
|
||||
This driver is to be used for the POWER Virtual
|
||||
Management Channel virtual adapter on the PowerVM
|
||||
platform. It provides both request/response and
|
||||
async message support through the /dev/ibmvmc node.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called ibmvmc.
|
||||
|
||||
config PHANTOM
|
||||
tristate "Sensable PHANToM (PCI)"
|
||||
depends on PCI
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#
|
||||
|
||||
obj-$(CONFIG_IBM_ASM) += ibmasm/
|
||||
obj-$(CONFIG_IBMVMC) += ibmvmc.o
|
||||
obj-$(CONFIG_AD525X_DPOT) += ad525x_dpot.o
|
||||
obj-$(CONFIG_AD525X_DPOT_I2C) += ad525x_dpot-i2c.o
|
||||
obj-$(CONFIG_AD525X_DPOT_SPI) += ad525x_dpot-spi.o
|
||||
|
|
|
@ -128,11 +128,12 @@ void cxl_context_set_mapping(struct cxl_context *ctx,
|
|||
mutex_unlock(&ctx->mapping_lock);
|
||||
}
|
||||
|
||||
static int cxl_mmap_fault(struct vm_fault *vmf)
|
||||
static vm_fault_t cxl_mmap_fault(struct vm_fault *vmf)
|
||||
{
|
||||
struct vm_area_struct *vma = vmf->vma;
|
||||
struct cxl_context *ctx = vma->vm_file->private_data;
|
||||
u64 area, offset;
|
||||
vm_fault_t ret;
|
||||
|
||||
offset = vmf->pgoff << PAGE_SHIFT;
|
||||
|
||||
|
@ -169,11 +170,11 @@ static int cxl_mmap_fault(struct vm_fault *vmf)
|
|||
return VM_FAULT_SIGBUS;
|
||||
}
|
||||
|
||||
vm_insert_pfn(vma, vmf->address, (area + offset) >> PAGE_SHIFT);
|
||||
ret = vmf_insert_pfn(vma, vmf->address, (area + offset) >> PAGE_SHIFT);
|
||||
|
||||
mutex_unlock(&ctx->status_mutex);
|
||||
|
||||
return VM_FAULT_NOPAGE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static const struct vm_operations_struct cxl_mmap_vmops = {
|
||||
|
|
2418
drivers/misc/ibmvmc.c
Normal file
2418
drivers/misc/ibmvmc.c
Normal file
File diff suppressed because it is too large
Load diff
209
drivers/misc/ibmvmc.h
Normal file
209
drivers/misc/ibmvmc.h
Normal file
|
@ -0,0 +1,209 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0+
|
||||
*
|
||||
* linux/drivers/misc/ibmvmc.h
|
||||
*
|
||||
* IBM Power Systems Virtual Management Channel Support.
|
||||
*
|
||||
* Copyright (c) 2004, 2018 IBM Corp.
|
||||
* Dave Engebretsen engebret@us.ibm.com
|
||||
* Steven Royer seroyer@linux.vnet.ibm.com
|
||||
* Adam Reznechek adreznec@linux.vnet.ibm.com
|
||||
* Bryant G. Ly <bryantly@linux.vnet.ibm.com>
|
||||
*/
|
||||
#ifndef IBMVMC_H
|
||||
#define IBMVMC_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/cdev.h>
|
||||
|
||||
#include <asm/vio.h>
|
||||
|
||||
#define IBMVMC_PROTOCOL_VERSION 0x0101
|
||||
|
||||
#define MIN_BUF_POOL_SIZE 16
|
||||
#define MIN_HMCS 1
|
||||
#define MIN_MTU 4096
|
||||
#define MAX_BUF_POOL_SIZE 64
|
||||
#define MAX_HMCS 2
|
||||
#define MAX_MTU (4 * 4096)
|
||||
#define DEFAULT_BUF_POOL_SIZE 32
|
||||
#define DEFAULT_HMCS 1
|
||||
#define DEFAULT_MTU 4096
|
||||
#define HMC_ID_LEN 32
|
||||
|
||||
#define VMC_INVALID_BUFFER_ID 0xFFFF
|
||||
|
||||
/* ioctl numbers */
|
||||
#define VMC_BASE 0xCC
|
||||
#define VMC_IOCTL_SETHMCID _IOW(VMC_BASE, 0x00, unsigned char *)
|
||||
#define VMC_IOCTL_QUERY _IOR(VMC_BASE, 0x01, struct ibmvmc_query_struct)
|
||||
#define VMC_IOCTL_REQUESTVMC _IOR(VMC_BASE, 0x02, u32)
|
||||
|
||||
#define VMC_MSG_CAP 0x01
|
||||
#define VMC_MSG_CAP_RESP 0x81
|
||||
#define VMC_MSG_OPEN 0x02
|
||||
#define VMC_MSG_OPEN_RESP 0x82
|
||||
#define VMC_MSG_CLOSE 0x03
|
||||
#define VMC_MSG_CLOSE_RESP 0x83
|
||||
#define VMC_MSG_ADD_BUF 0x04
|
||||
#define VMC_MSG_ADD_BUF_RESP 0x84
|
||||
#define VMC_MSG_REM_BUF 0x05
|
||||
#define VMC_MSG_REM_BUF_RESP 0x85
|
||||
#define VMC_MSG_SIGNAL 0x06
|
||||
|
||||
#define VMC_MSG_SUCCESS 0
|
||||
#define VMC_MSG_INVALID_HMC_INDEX 1
|
||||
#define VMC_MSG_INVALID_BUFFER_ID 2
|
||||
#define VMC_MSG_CLOSED_HMC 3
|
||||
#define VMC_MSG_INTERFACE_FAILURE 4
|
||||
#define VMC_MSG_NO_BUFFER 5
|
||||
|
||||
#define VMC_BUF_OWNER_ALPHA 0
|
||||
#define VMC_BUF_OWNER_HV 1
|
||||
|
||||
enum ibmvmc_states {
|
||||
ibmvmc_state_sched_reset = -1,
|
||||
ibmvmc_state_initial = 0,
|
||||
ibmvmc_state_crqinit = 1,
|
||||
ibmvmc_state_capabilities = 2,
|
||||
ibmvmc_state_ready = 3,
|
||||
ibmvmc_state_failed = 4,
|
||||
};
|
||||
|
||||
enum ibmhmc_states {
|
||||
/* HMC connection not established */
|
||||
ibmhmc_state_free = 0,
|
||||
|
||||
/* HMC connection established (open called) */
|
||||
ibmhmc_state_initial = 1,
|
||||
|
||||
/* open msg sent to HV, due to ioctl(1) call */
|
||||
ibmhmc_state_opening = 2,
|
||||
|
||||
/* HMC connection ready, open resp msg from HV */
|
||||
ibmhmc_state_ready = 3,
|
||||
|
||||
/* HMC connection failure */
|
||||
ibmhmc_state_failed = 4,
|
||||
};
|
||||
|
||||
struct ibmvmc_buffer {
|
||||
u8 valid; /* 1 when DMA storage allocated to buffer */
|
||||
u8 free; /* 1 when buffer available for the Alpha Partition */
|
||||
u8 owner;
|
||||
u16 id;
|
||||
u32 size;
|
||||
u32 msg_len;
|
||||
dma_addr_t dma_addr_local;
|
||||
dma_addr_t dma_addr_remote;
|
||||
void *real_addr_local;
|
||||
};
|
||||
|
||||
struct ibmvmc_admin_crq_msg {
|
||||
u8 valid; /* RPA Defined */
|
||||
u8 type; /* ibmvmc msg type */
|
||||
u8 status; /* Response msg status. Zero is success and on failure,
|
||||
* either 1 - General Failure, or 2 - Invalid Version is
|
||||
* returned.
|
||||
*/
|
||||
u8 rsvd[2];
|
||||
u8 max_hmc; /* Max # of independent HMC connections supported */
|
||||
__be16 pool_size; /* Maximum number of buffers supported per HMC
|
||||
* connection
|
||||
*/
|
||||
__be32 max_mtu; /* Maximum message size supported (bytes) */
|
||||
__be16 crq_size; /* # of entries available in the CRQ for the
|
||||
* source partition. The target partition must
|
||||
* limit the number of outstanding messages to
|
||||
* one half or less.
|
||||
*/
|
||||
__be16 version; /* Indicates the code level of the management partition
|
||||
* or the hypervisor with the high-order byte
|
||||
* indicating a major version and the low-order byte
|
||||
* indicating a minor version.
|
||||
*/
|
||||
};
|
||||
|
||||
struct ibmvmc_crq_msg {
|
||||
u8 valid; /* RPA Defined */
|
||||
u8 type; /* ibmvmc msg type */
|
||||
u8 status; /* Response msg status */
|
||||
union {
|
||||
u8 rsvd; /* Reserved */
|
||||
u8 owner;
|
||||
} var1;
|
||||
u8 hmc_session; /* Session Identifier for the current VMC connection */
|
||||
u8 hmc_index; /* A unique HMC Idx would be used if multiple management
|
||||
* applications running concurrently were desired
|
||||
*/
|
||||
union {
|
||||
__be16 rsvd;
|
||||
__be16 buffer_id;
|
||||
} var2;
|
||||
__be32 rsvd;
|
||||
union {
|
||||
__be32 rsvd;
|
||||
__be32 lioba;
|
||||
__be32 msg_len;
|
||||
} var3;
|
||||
};
|
||||
|
||||
/* an RPA command/response transport queue */
|
||||
struct crq_queue {
|
||||
struct ibmvmc_crq_msg *msgs;
|
||||
int size, cur;
|
||||
dma_addr_t msg_token;
|
||||
spinlock_t lock;
|
||||
};
|
||||
|
||||
/* VMC server adapter settings */
|
||||
struct crq_server_adapter {
|
||||
struct device *dev;
|
||||
struct crq_queue queue;
|
||||
u32 liobn;
|
||||
u32 riobn;
|
||||
struct tasklet_struct work_task;
|
||||
wait_queue_head_t reset_wait_queue;
|
||||
struct task_struct *reset_task;
|
||||
};
|
||||
|
||||
/* Driver wide settings */
|
||||
struct ibmvmc_struct {
|
||||
u32 state;
|
||||
u32 max_mtu;
|
||||
u32 max_buffer_pool_size;
|
||||
u32 max_hmc_index;
|
||||
struct crq_server_adapter *adapter;
|
||||
struct cdev cdev;
|
||||
u32 vmc_drc_index;
|
||||
};
|
||||
|
||||
struct ibmvmc_file_session;
|
||||
|
||||
/* Connection specific settings */
|
||||
struct ibmvmc_hmc {
|
||||
u8 session;
|
||||
u8 index;
|
||||
u32 state;
|
||||
struct crq_server_adapter *adapter;
|
||||
spinlock_t lock;
|
||||
unsigned char hmc_id[HMC_ID_LEN];
|
||||
struct ibmvmc_buffer buffer[MAX_BUF_POOL_SIZE];
|
||||
unsigned short queue_outbound_msgs[MAX_BUF_POOL_SIZE];
|
||||
int queue_head, queue_tail;
|
||||
struct ibmvmc_file_session *file_session;
|
||||
};
|
||||
|
||||
struct ibmvmc_file_session {
|
||||
struct file *file;
|
||||
struct ibmvmc_hmc *hmc;
|
||||
bool valid;
|
||||
};
|
||||
|
||||
struct ibmvmc_query_struct {
|
||||
int have_vmc;
|
||||
int state;
|
||||
int vmc_drc_index;
|
||||
};
|
||||
|
||||
#endif /* __IBMVMC_H */
|
|
@ -926,7 +926,7 @@ again:
|
|||
*
|
||||
* Note: gru segments alway mmaped on GRU_GSEG_PAGESIZE boundaries.
|
||||
*/
|
||||
int gru_fault(struct vm_fault *vmf)
|
||||
vm_fault_t gru_fault(struct vm_fault *vmf)
|
||||
{
|
||||
struct vm_area_struct *vma = vmf->vma;
|
||||
struct gru_thread_state *gts;
|
||||
|
|
|
@ -147,6 +147,7 @@
|
|||
#include <linux/mutex.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/mmu_notifier.h>
|
||||
#include <linux/mm_types.h>
|
||||
#include "gru.h"
|
||||
#include "grulib.h"
|
||||
#include "gruhandles.h"
|
||||
|
@ -665,7 +666,7 @@ extern unsigned long gru_reserve_cb_resources(struct gru_state *gru,
|
|||
int cbr_au_count, char *cbmap);
|
||||
extern unsigned long gru_reserve_ds_resources(struct gru_state *gru,
|
||||
int dsr_au_count, char *dsmap);
|
||||
extern int gru_fault(struct vm_fault *vmf);
|
||||
extern vm_fault_t gru_fault(struct vm_fault *vmf);
|
||||
extern struct gru_mm_struct *gru_register_mmu_notifier(void);
|
||||
extern void gru_drop_mmu_notifier(struct gru_mm_struct *gms);
|
||||
|
||||
|
|
|
@ -407,7 +407,7 @@ xpnet_send(struct sk_buff *skb, struct xpnet_pending_msg *queued_msg,
|
|||
* destination partid. If the destination partid octets are 0xffff,
|
||||
* this packet is to be broadcast to all connected partitions.
|
||||
*/
|
||||
static int
|
||||
static netdev_tx_t
|
||||
xpnet_dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
{
|
||||
struct xpnet_pending_msg *queued_msg;
|
||||
|
|
|
@ -735,7 +735,7 @@ static int kim_probe(struct platform_device *pdev)
|
|||
st_kim_devices[0] = pdev;
|
||||
}
|
||||
|
||||
kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_ATOMIC);
|
||||
kim_gdata = kzalloc(sizeof(struct kim_data_s), GFP_KERNEL);
|
||||
if (!kim_gdata) {
|
||||
pr_err("no mem to allocate");
|
||||
return -ENOMEM;
|
||||
|
|
|
@ -239,9 +239,13 @@ static int tifm_7xx1_resume(struct pci_dev *dev)
|
|||
unsigned long timeout;
|
||||
unsigned int good_sockets = 0, bad_sockets = 0;
|
||||
unsigned long flags;
|
||||
unsigned char new_ids[fm->num_sockets];
|
||||
/* Maximum number of entries is 4 */
|
||||
unsigned char new_ids[4];
|
||||
DECLARE_COMPLETION_ONSTACK(finish_resume);
|
||||
|
||||
if (WARN_ON(fm->num_sockets > ARRAY_SIZE(new_ids)))
|
||||
return -ENXIO;
|
||||
|
||||
pci_set_power_state(dev, PCI_D0);
|
||||
pci_restore_state(dev);
|
||||
rc = pci_enable_device(dev);
|
||||
|
|
|
@ -576,15 +576,9 @@ static void vmballoon_pop(struct vmballoon *b)
|
|||
}
|
||||
}
|
||||
|
||||
if (b->batch_page) {
|
||||
vunmap(b->batch_page);
|
||||
b->batch_page = NULL;
|
||||
}
|
||||
|
||||
if (b->page) {
|
||||
__free_page(b->page);
|
||||
b->page = NULL;
|
||||
}
|
||||
/* Clearing the batch_page unconditionally has no adverse effect */
|
||||
free_page((unsigned long)b->batch_page);
|
||||
b->batch_page = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -991,16 +985,13 @@ static const struct vmballoon_ops vmballoon_batched_ops = {
|
|||
|
||||
static bool vmballoon_init_batching(struct vmballoon *b)
|
||||
{
|
||||
b->page = alloc_page(VMW_PAGE_ALLOC_NOSLEEP);
|
||||
if (!b->page)
|
||||
struct page *page;
|
||||
|
||||
page = alloc_page(GFP_KERNEL | __GFP_ZERO);
|
||||
if (!page)
|
||||
return false;
|
||||
|
||||
b->batch_page = vmap(&b->page, 1, VM_MAP, PAGE_KERNEL);
|
||||
if (!b->batch_page) {
|
||||
__free_page(b->page);
|
||||
return false;
|
||||
}
|
||||
|
||||
b->batch_page = page_address(page);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue