Skip to content

Commit

Permalink
Automatic merge of 'next-test' into merge-test (2024-12-18 13:55)
Browse files Browse the repository at this point in the history
  • Loading branch information
maddy-kerneldev committed Dec 18, 2024
2 parents 2dd0957 + d629d7a commit 12bc77d
Show file tree
Hide file tree
Showing 16 changed files with 103 additions and 125 deletions.
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
The cxl driver is no longer maintained, and will be removed from the kernel in
the near future.

Please note that attributes that are shared between devices are stored in
the directory pointed to by the symlink device/.
For example, the real path of the attribute /sys/class/cxl/afu0.0s/irqs_max is
Expand Down
4 changes: 2 additions & 2 deletions MAINTAINERS
Original file line number Diff line number Diff line change
Expand Up @@ -6228,8 +6228,8 @@ CXL (IBM Coherent Accelerator Processor Interface CAPI) DRIVER
M: Frederic Barrat <[email protected]>
M: Andrew Donnellan <[email protected]>
L: [email protected]
S: Supported
F: Documentation/ABI/testing/sysfs-class-cxl
S: Obsolete
F: Documentation/ABI/obsolete/sysfs-class-cxl
F: Documentation/arch/powerpc/cxl.rst
F: arch/powerpc/platforms/powernv/pci-cxl.c
F: drivers/misc/cxl/
Expand Down
9 changes: 9 additions & 0 deletions arch/powerpc/include/asm/hugetlb.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,15 @@

extern bool hugetlb_disabled;

static inline bool hugepages_supported(void)
{
if (hugetlb_disabled)
return false;

return HPAGE_SHIFT != 0;
}
#define hugepages_supported hugepages_supported

void __init hugetlbpage_init_defaultsize(void);

int slice_is_hugepage_only_range(struct mm_struct *mm, unsigned long addr,
Expand Down
4 changes: 2 additions & 2 deletions arch/powerpc/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -1960,8 +1960,8 @@ void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
* address of _start and the second entry is the TOC
* value we need to use.
*/
__get_user(entry, (unsigned long __user *)start);
__get_user(toc, (unsigned long __user *)start+1);
get_user(entry, (unsigned long __user *)start);
get_user(toc, (unsigned long __user *)start+1);

/* Check whether the e_entry function descriptor entries
* need to be relocated before we can use them.
Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/kernel/vdso32_wrapper.S
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <linux/linkage.h>
#include <asm/page.h>

__PAGE_ALIGNED_DATA
.section ".data..ro_after_init", "aw"

.globl vdso32_start, vdso32_end
.balign PAGE_SIZE
Expand Down
2 changes: 1 addition & 1 deletion arch/powerpc/kernel/vdso64_wrapper.S
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
#include <linux/linkage.h>
#include <asm/page.h>

__PAGE_ALIGNED_DATA
.section ".data..ro_after_init", "aw"

.globl vdso64_start, vdso64_end
.balign PAGE_SIZE
Expand Down
119 changes: 60 additions & 59 deletions arch/powerpc/platforms/8xx/cpm1.c
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
#include <sysdev/fsl_soc.h>

#ifdef CONFIG_8xx_GPIO
#include <linux/gpio/legacy-of-mm-gpiochip.h>
#include <linux/gpio/driver.h>
#endif

#define CPM_MAP_SIZE (0x4000)
Expand Down Expand Up @@ -376,7 +376,8 @@ int __init cpm1_clk_setup(enum cpm_clk_target target, int clock, int mode)
#ifdef CONFIG_8xx_GPIO

struct cpm1_gpio16_chip {
struct of_mm_gpio_chip mm_gc;
struct gpio_chip gc;
void __iomem *regs;
spinlock_t lock;

/* shadowed data register to clear/set bits safely */
Expand All @@ -386,31 +387,27 @@ struct cpm1_gpio16_chip {
int irq[16];
};

static void cpm1_gpio16_save_regs(struct of_mm_gpio_chip *mm_gc)
static void cpm1_gpio16_save_regs(struct cpm1_gpio16_chip *cpm1_gc)
{
struct cpm1_gpio16_chip *cpm1_gc =
container_of(mm_gc, struct cpm1_gpio16_chip, mm_gc);
struct cpm_ioport16 __iomem *iop = mm_gc->regs;
struct cpm_ioport16 __iomem *iop = cpm1_gc->regs;

cpm1_gc->cpdata = in_be16(&iop->dat);
}

static int cpm1_gpio16_get(struct gpio_chip *gc, unsigned int gpio)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm_ioport16 __iomem *iop = mm_gc->regs;
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport16 __iomem *iop = cpm1_gc->regs;
u16 pin_mask;

pin_mask = 1 << (15 - gpio);

return !!(in_be16(&iop->dat) & pin_mask);
}

static void __cpm1_gpio16_set(struct of_mm_gpio_chip *mm_gc, u16 pin_mask,
int value)
static void __cpm1_gpio16_set(struct cpm1_gpio16_chip *cpm1_gc, u16 pin_mask, int value)
{
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport16 __iomem *iop = mm_gc->regs;
struct cpm_ioport16 __iomem *iop = cpm1_gc->regs;

if (value)
cpm1_gc->cpdata |= pin_mask;
Expand All @@ -422,38 +419,35 @@ static void __cpm1_gpio16_set(struct of_mm_gpio_chip *mm_gc, u16 pin_mask,

static void cpm1_gpio16_set(struct gpio_chip *gc, unsigned int gpio, int value)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc);
unsigned long flags;
u16 pin_mask = 1 << (15 - gpio);

spin_lock_irqsave(&cpm1_gc->lock, flags);

__cpm1_gpio16_set(mm_gc, pin_mask, value);
__cpm1_gpio16_set(cpm1_gc, pin_mask, value);

spin_unlock_irqrestore(&cpm1_gc->lock, flags);
}

static int cpm1_gpio16_to_irq(struct gpio_chip *gc, unsigned int gpio)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc);

return cpm1_gc->irq[gpio] ? : -ENXIO;
}

static int cpm1_gpio16_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport16 __iomem *iop = mm_gc->regs;
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport16 __iomem *iop = cpm1_gc->regs;
unsigned long flags;
u16 pin_mask = 1 << (15 - gpio);

spin_lock_irqsave(&cpm1_gc->lock, flags);

setbits16(&iop->dir, pin_mask);
__cpm1_gpio16_set(mm_gc, pin_mask, val);
__cpm1_gpio16_set(cpm1_gc, pin_mask, val);

spin_unlock_irqrestore(&cpm1_gc->lock, flags);

Expand All @@ -462,9 +456,8 @@ static int cpm1_gpio16_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)

static int cpm1_gpio16_dir_in(struct gpio_chip *gc, unsigned int gpio)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport16 __iomem *iop = mm_gc->regs;
struct cpm1_gpio16_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport16 __iomem *iop = cpm1_gc->regs;
unsigned long flags;
u16 pin_mask = 1 << (15 - gpio);

Expand All @@ -481,11 +474,10 @@ int cpm1_gpiochip_add16(struct device *dev)
{
struct device_node *np = dev->of_node;
struct cpm1_gpio16_chip *cpm1_gc;
struct of_mm_gpio_chip *mm_gc;
struct gpio_chip *gc;
u16 mask;

cpm1_gc = kzalloc(sizeof(*cpm1_gc), GFP_KERNEL);
cpm1_gc = devm_kzalloc(dev, sizeof(*cpm1_gc), GFP_KERNEL);
if (!cpm1_gc)
return -ENOMEM;

Expand All @@ -499,10 +491,8 @@ int cpm1_gpiochip_add16(struct device *dev)
cpm1_gc->irq[i] = irq_of_parse_and_map(np, j++);
}

mm_gc = &cpm1_gc->mm_gc;
gc = &mm_gc->gc;

mm_gc->save_regs = cpm1_gpio16_save_regs;
gc = &cpm1_gc->gc;
gc->base = -1;
gc->ngpio = 16;
gc->direction_input = cpm1_gpio16_dir_in;
gc->direction_output = cpm1_gpio16_dir_out;
Expand All @@ -512,42 +502,49 @@ int cpm1_gpiochip_add16(struct device *dev)
gc->parent = dev;
gc->owner = THIS_MODULE;

return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc);
gc->label = devm_kasprintf(dev, GFP_KERNEL, "%pOF", np);
if (!gc->label)
return -ENOMEM;

cpm1_gc->regs = devm_of_iomap(dev, np, 0, NULL);
if (IS_ERR(cpm1_gc->regs))
return PTR_ERR(cpm1_gc->regs);

cpm1_gpio16_save_regs(cpm1_gc);

return devm_gpiochip_add_data(dev, gc, cpm1_gc);
}

struct cpm1_gpio32_chip {
struct of_mm_gpio_chip mm_gc;
struct gpio_chip gc;
void __iomem *regs;
spinlock_t lock;

/* shadowed data register to clear/set bits safely */
u32 cpdata;
};

static void cpm1_gpio32_save_regs(struct of_mm_gpio_chip *mm_gc)
static void cpm1_gpio32_save_regs(struct cpm1_gpio32_chip *cpm1_gc)
{
struct cpm1_gpio32_chip *cpm1_gc =
container_of(mm_gc, struct cpm1_gpio32_chip, mm_gc);
struct cpm_ioport32b __iomem *iop = mm_gc->regs;
struct cpm_ioport32b __iomem *iop = cpm1_gc->regs;

cpm1_gc->cpdata = in_be32(&iop->dat);
}

static int cpm1_gpio32_get(struct gpio_chip *gc, unsigned int gpio)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm_ioport32b __iomem *iop = mm_gc->regs;
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport32b __iomem *iop = cpm1_gc->regs;
u32 pin_mask;

pin_mask = 1 << (31 - gpio);

return !!(in_be32(&iop->dat) & pin_mask);
}

static void __cpm1_gpio32_set(struct of_mm_gpio_chip *mm_gc, u32 pin_mask,
int value)
static void __cpm1_gpio32_set(struct cpm1_gpio32_chip *cpm1_gc, u32 pin_mask, int value)
{
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport32b __iomem *iop = mm_gc->regs;
struct cpm_ioport32b __iomem *iop = cpm1_gc->regs;

if (value)
cpm1_gc->cpdata |= pin_mask;
Expand All @@ -559,30 +556,28 @@ static void __cpm1_gpio32_set(struct of_mm_gpio_chip *mm_gc, u32 pin_mask,

static void cpm1_gpio32_set(struct gpio_chip *gc, unsigned int gpio, int value)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc);
unsigned long flags;
u32 pin_mask = 1 << (31 - gpio);

spin_lock_irqsave(&cpm1_gc->lock, flags);

__cpm1_gpio32_set(mm_gc, pin_mask, value);
__cpm1_gpio32_set(cpm1_gc, pin_mask, value);

spin_unlock_irqrestore(&cpm1_gc->lock, flags);
}

static int cpm1_gpio32_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport32b __iomem *iop = mm_gc->regs;
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport32b __iomem *iop = cpm1_gc->regs;
unsigned long flags;
u32 pin_mask = 1 << (31 - gpio);

spin_lock_irqsave(&cpm1_gc->lock, flags);

setbits32(&iop->dir, pin_mask);
__cpm1_gpio32_set(mm_gc, pin_mask, val);
__cpm1_gpio32_set(cpm1_gc, pin_mask, val);

spin_unlock_irqrestore(&cpm1_gc->lock, flags);

Expand All @@ -591,9 +586,8 @@ static int cpm1_gpio32_dir_out(struct gpio_chip *gc, unsigned int gpio, int val)

static int cpm1_gpio32_dir_in(struct gpio_chip *gc, unsigned int gpio)
{
struct of_mm_gpio_chip *mm_gc = to_of_mm_gpio_chip(gc);
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(&mm_gc->gc);
struct cpm_ioport32b __iomem *iop = mm_gc->regs;
struct cpm1_gpio32_chip *cpm1_gc = gpiochip_get_data(gc);
struct cpm_ioport32b __iomem *iop = cpm1_gc->regs;
unsigned long flags;
u32 pin_mask = 1 << (31 - gpio);

Expand All @@ -610,19 +604,16 @@ int cpm1_gpiochip_add32(struct device *dev)
{
struct device_node *np = dev->of_node;
struct cpm1_gpio32_chip *cpm1_gc;
struct of_mm_gpio_chip *mm_gc;
struct gpio_chip *gc;

cpm1_gc = kzalloc(sizeof(*cpm1_gc), GFP_KERNEL);
cpm1_gc = devm_kzalloc(dev, sizeof(*cpm1_gc), GFP_KERNEL);
if (!cpm1_gc)
return -ENOMEM;

spin_lock_init(&cpm1_gc->lock);

mm_gc = &cpm1_gc->mm_gc;
gc = &mm_gc->gc;

mm_gc->save_regs = cpm1_gpio32_save_regs;
gc = &cpm1_gc->gc;
gc->base = -1;
gc->ngpio = 32;
gc->direction_input = cpm1_gpio32_dir_in;
gc->direction_output = cpm1_gpio32_dir_out;
Expand All @@ -631,7 +622,17 @@ int cpm1_gpiochip_add32(struct device *dev)
gc->parent = dev;
gc->owner = THIS_MODULE;

return of_mm_gpiochip_add_data(np, mm_gc, cpm1_gc);
gc->label = devm_kasprintf(dev, GFP_KERNEL, "%pOF", np);
if (!gc->label)
return -ENOMEM;

cpm1_gc->regs = devm_of_iomap(dev, np, 0, NULL);
if (IS_ERR(cpm1_gc->regs))
return PTR_ERR(cpm1_gc->regs);

cpm1_gpio32_save_regs(cpm1_gc);

return devm_gpiochip_add_data(dev, gc, cpm1_gc);
}

#endif /* CONFIG_8xx_GPIO */
2 changes: 1 addition & 1 deletion drivers/macintosh/mac_hid.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ static int mac_hid_toggle_emumouse(const struct ctl_table *table, int write,
}

/* file(s) in /proc/sys/dev/mac_hid */
static struct ctl_table mac_hid_files[] = {
static const struct ctl_table mac_hid_files[] = {
{
.procname = "mouse_button_emulation",
.data = &mouse_emulate_buttons,
Expand Down
6 changes: 4 additions & 2 deletions drivers/misc/cxl/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ config CXL_BASE
select PPC_64S_HASH_MMU

config CXL
tristate "Support for IBM Coherent Accelerators (CXL)"
tristate "Support for IBM Coherent Accelerators (CXL) (DEPRECATED)"
depends on PPC_POWERNV && PCI_MSI && EEH
select CXL_BASE
default m
help
The cxl driver is deprecated and will be removed in a future
kernel release.

Select this option to enable driver support for IBM Coherent
Accelerators (CXL). CXL is otherwise known as Coherent Accelerator
Processor Interface (CAPI). CAPI allows accelerators in FPGAs to be
Expand Down
2 changes: 2 additions & 0 deletions drivers/misc/cxl/of.c
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,8 @@ int cxl_of_probe(struct platform_device *pdev)
int ret;
int slice = 0, slice_ok = 0;

dev_err_once(&pdev->dev, "DEPRECATION: cxl is deprecated and will be removed in a future kernel release\n");

pr_devel("in %s\n", __func__);

np = pdev->dev.of_node;
Expand Down
2 changes: 2 additions & 0 deletions drivers/misc/cxl/pci.c
Original file line number Diff line number Diff line change
Expand Up @@ -1726,6 +1726,8 @@ static int cxl_probe(struct pci_dev *dev, const struct pci_device_id *id)
int slice;
int rc;

dev_err_once(&dev->dev, "DEPRECATED: cxl is deprecated and will be removed in a future kernel release\n");

if (cxl_pci_is_vphb_device(dev)) {
dev_dbg(&dev->dev, "cxl_init_adapter: Ignoring cxl vphb device\n");
return -ENODEV;
Expand Down
Loading

0 comments on commit 12bc77d

Please sign in to comment.