Skip to content

Commit 3e44c7f

Browse files
committed
Merge remote-tracking branch 'stable/linux-6.12.y' into rpi-6.12.y
2 parents 42c8bbf + 444b39e commit 3e44c7f

File tree

45 files changed

+640
-223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+640
-223
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# SPDX-License-Identifier: GPL-2.0
22
VERSION = 6
33
PATCHLEVEL = 12
4-
SUBLEVEL = 73
4+
SUBLEVEL = 74
55
EXTRAVERSION =
66
NAME = Baby Opossum Posse
77

arch/loongarch/mm/kasan_init.c

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -42,39 +42,43 @@ static pgd_t kasan_pg_dir[PTRS_PER_PGD] __initdata __aligned(PAGE_SIZE);
4242

4343
bool kasan_early_stage = true;
4444

45-
void *kasan_mem_to_shadow(const void *addr)
45+
static void *mem_to_shadow(const void *addr)
4646
{
47-
if (!kasan_arch_is_ready()) {
47+
unsigned long offset = 0;
48+
unsigned long maddr = (unsigned long)addr;
49+
unsigned long xrange = (maddr >> XRANGE_SHIFT) & 0xffff;
50+
51+
if (maddr >= FIXADDR_START)
4852
return (void *)(kasan_early_shadow_page);
49-
} else {
50-
unsigned long maddr = (unsigned long)addr;
51-
unsigned long xrange = (maddr >> XRANGE_SHIFT) & 0xffff;
52-
unsigned long offset = 0;
53-
54-
if (maddr >= FIXADDR_START)
55-
return (void *)(kasan_early_shadow_page);
56-
57-
maddr &= XRANGE_SHADOW_MASK;
58-
switch (xrange) {
59-
case XKPRANGE_CC_SEG:
60-
offset = XKPRANGE_CC_SHADOW_OFFSET;
61-
break;
62-
case XKPRANGE_UC_SEG:
63-
offset = XKPRANGE_UC_SHADOW_OFFSET;
64-
break;
65-
case XKPRANGE_WC_SEG:
66-
offset = XKPRANGE_WC_SHADOW_OFFSET;
67-
break;
68-
case XKVRANGE_VC_SEG:
69-
offset = XKVRANGE_VC_SHADOW_OFFSET;
70-
break;
71-
default:
72-
WARN_ON(1);
73-
return NULL;
74-
}
7553

76-
return (void *)((maddr >> KASAN_SHADOW_SCALE_SHIFT) + offset);
54+
maddr &= XRANGE_SHADOW_MASK;
55+
switch (xrange) {
56+
case XKPRANGE_CC_SEG:
57+
offset = XKPRANGE_CC_SHADOW_OFFSET;
58+
break;
59+
case XKPRANGE_UC_SEG:
60+
offset = XKPRANGE_UC_SHADOW_OFFSET;
61+
break;
62+
case XKPRANGE_WC_SEG:
63+
offset = XKPRANGE_WC_SHADOW_OFFSET;
64+
break;
65+
case XKVRANGE_VC_SEG:
66+
offset = XKVRANGE_VC_SHADOW_OFFSET;
67+
break;
68+
default:
69+
WARN_ON(1);
70+
return NULL;
7771
}
72+
73+
return (void *)((maddr >> KASAN_SHADOW_SCALE_SHIFT) + offset);
74+
}
75+
76+
void *kasan_mem_to_shadow(const void *addr)
77+
{
78+
if (kasan_arch_is_ready())
79+
return mem_to_shadow(addr);
80+
else
81+
return (void *)(kasan_early_shadow_page);
7882
}
7983

8084
const void *kasan_shadow_to_mem(const void *shadow_addr)
@@ -295,10 +299,8 @@ void __init kasan_init(void)
295299
/* Maps everything to a single page of zeroes */
296300
kasan_pgd_populate(KASAN_SHADOW_START, KASAN_SHADOW_END, NUMA_NO_NODE, true);
297301

298-
kasan_populate_early_shadow(kasan_mem_to_shadow((void *)VMALLOC_START),
299-
kasan_mem_to_shadow((void *)KFENCE_AREA_END));
300-
301-
kasan_early_stage = false;
302+
kasan_populate_early_shadow(mem_to_shadow((void *)VMALLOC_START),
303+
mem_to_shadow((void *)KFENCE_AREA_END));
302304

303305
/* Populate the linear mapping */
304306
for_each_mem_range(i, &pa_start, &pa_end) {
@@ -308,13 +310,13 @@ void __init kasan_init(void)
308310
if (start >= end)
309311
break;
310312

311-
kasan_map_populate((unsigned long)kasan_mem_to_shadow(start),
312-
(unsigned long)kasan_mem_to_shadow(end), NUMA_NO_NODE);
313+
kasan_map_populate((unsigned long)mem_to_shadow(start),
314+
(unsigned long)mem_to_shadow(end), NUMA_NO_NODE);
313315
}
314316

315317
/* Populate modules mapping */
316-
kasan_map_populate((unsigned long)kasan_mem_to_shadow((void *)MODULES_VADDR),
317-
(unsigned long)kasan_mem_to_shadow((void *)MODULES_END), NUMA_NO_NODE);
318+
kasan_map_populate((unsigned long)mem_to_shadow((void *)MODULES_VADDR),
319+
(unsigned long)mem_to_shadow((void *)MODULES_END), NUMA_NO_NODE);
318320
/*
319321
* KAsan may reuse the contents of kasan_early_shadow_pte directly, so we
320322
* should make sure that it maps the zero page read-only.
@@ -329,5 +331,6 @@ void __init kasan_init(void)
329331

330332
/* At this point kasan is fully initialized. Enable error messages */
331333
init_task.kasan_depth = 0;
334+
kasan_early_stage = false;
332335
pr_info("KernelAddressSanitizer initialized.\n");
333336
}

drivers/bus/fsl-mc/fsl-mc-bus.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,8 @@ static ssize_t modalias_show(struct device *dev, struct device_attribute *attr,
175175
{
176176
struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
177177

178-
return sprintf(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor,
179-
mc_dev->obj_desc.type);
178+
return sysfs_emit(buf, "fsl-mc:v%08Xd%s\n", mc_dev->obj_desc.vendor,
179+
mc_dev->obj_desc.type);
180180
}
181181
static DEVICE_ATTR_RO(modalias);
182182

@@ -201,8 +201,12 @@ static ssize_t driver_override_show(struct device *dev,
201201
struct device_attribute *attr, char *buf)
202202
{
203203
struct fsl_mc_device *mc_dev = to_fsl_mc_device(dev);
204+
ssize_t len;
204205

205-
return snprintf(buf, PAGE_SIZE, "%s\n", mc_dev->driver_override);
206+
device_lock(dev);
207+
len = sysfs_emit(buf, "%s\n", mc_dev->driver_override);
208+
device_unlock(dev);
209+
return len;
206210
}
207211
static DEVICE_ATTR_RW(driver_override);
208212

drivers/gpio/gpio-sprd.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
struct sprd_gpio {
3636
struct gpio_chip chip;
3737
void __iomem *base;
38-
spinlock_t lock;
38+
raw_spinlock_t lock;
3939
int irq;
4040
};
4141

@@ -54,7 +54,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset,
5454
unsigned long flags;
5555
u32 tmp;
5656

57-
spin_lock_irqsave(&sprd_gpio->lock, flags);
57+
raw_spin_lock_irqsave(&sprd_gpio->lock, flags);
5858
tmp = readl_relaxed(base + reg);
5959

6060
if (val)
@@ -63,7 +63,7 @@ static void sprd_gpio_update(struct gpio_chip *chip, unsigned int offset,
6363
tmp &= ~BIT(SPRD_GPIO_BIT(offset));
6464

6565
writel_relaxed(tmp, base + reg);
66-
spin_unlock_irqrestore(&sprd_gpio->lock, flags);
66+
raw_spin_unlock_irqrestore(&sprd_gpio->lock, flags);
6767
}
6868

6969
static int sprd_gpio_read(struct gpio_chip *chip, unsigned int offset, u16 reg)
@@ -234,7 +234,7 @@ static int sprd_gpio_probe(struct platform_device *pdev)
234234
if (IS_ERR(sprd_gpio->base))
235235
return PTR_ERR(sprd_gpio->base);
236236

237-
spin_lock_init(&sprd_gpio->lock);
237+
raw_spin_lock_init(&sprd_gpio->lock);
238238

239239
sprd_gpio->chip.label = dev_name(&pdev->dev);
240240
sprd_gpio->chip.ngpio = SPRD_GPIO_NR;

drivers/gpio/gpiolib-acpi-core.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1351,6 +1351,7 @@ static int acpi_gpio_package_count(const union acpi_object *obj)
13511351
while (element < end) {
13521352
switch (element->type) {
13531353
case ACPI_TYPE_LOCAL_REFERENCE:
1354+
case ACPI_TYPE_STRING:
13541355
element += 3;
13551356
fallthrough;
13561357
case ACPI_TYPE_INTEGER:

drivers/gpu/drm/amd/display/dc/dcn30/dcn30_cm_common.c

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,9 +105,12 @@ void cm_helper_program_gamcor_xfer_func(
105105
#define NUMBER_REGIONS 32
106106
#define NUMBER_SW_SEGMENTS 16
107107

108-
bool cm3_helper_translate_curve_to_hw_format(
109-
const struct dc_transfer_func *output_tf,
110-
struct pwl_params *lut_params, bool fixpoint)
108+
#define DC_LOGGER \
109+
ctx->logger
110+
111+
bool cm3_helper_translate_curve_to_hw_format(struct dc_context *ctx,
112+
const struct dc_transfer_func *output_tf,
113+
struct pwl_params *lut_params, bool fixpoint)
111114
{
112115
struct curve_points3 *corner_points;
113116
struct pwl_result_data *rgb_resulted;
@@ -256,6 +259,10 @@ bool cm3_helper_translate_curve_to_hw_format(
256259
if (fixpoint == true) {
257260
i = 1;
258261
while (i != hw_points + 2) {
262+
uint32_t red_clamp;
263+
uint32_t green_clamp;
264+
uint32_t blue_clamp;
265+
259266
if (i >= hw_points) {
260267
if (dc_fixpt_lt(rgb_plus_1->red, rgb->red))
261268
rgb_plus_1->red = dc_fixpt_add(rgb->red,
@@ -268,9 +275,20 @@ bool cm3_helper_translate_curve_to_hw_format(
268275
rgb_minus_1->delta_blue);
269276
}
270277

271-
rgb->delta_red_reg = dc_fixpt_clamp_u0d10(rgb->delta_red);
272-
rgb->delta_green_reg = dc_fixpt_clamp_u0d10(rgb->delta_green);
273-
rgb->delta_blue_reg = dc_fixpt_clamp_u0d10(rgb->delta_blue);
278+
rgb->delta_red = dc_fixpt_sub(rgb_plus_1->red, rgb->red);
279+
rgb->delta_green = dc_fixpt_sub(rgb_plus_1->green, rgb->green);
280+
rgb->delta_blue = dc_fixpt_sub(rgb_plus_1->blue, rgb->blue);
281+
282+
red_clamp = dc_fixpt_clamp_u0d14(rgb->delta_red);
283+
green_clamp = dc_fixpt_clamp_u0d14(rgb->delta_green);
284+
blue_clamp = dc_fixpt_clamp_u0d14(rgb->delta_blue);
285+
286+
if (red_clamp >> 10 || green_clamp >> 10 || blue_clamp >> 10)
287+
DC_LOG_ERROR("Losing delta precision while programming shaper LUT.");
288+
289+
rgb->delta_red_reg = red_clamp & 0x3ff;
290+
rgb->delta_green_reg = green_clamp & 0x3ff;
291+
rgb->delta_blue_reg = blue_clamp & 0x3ff;
274292
rgb->red_reg = dc_fixpt_clamp_u0d14(rgb->red);
275293
rgb->green_reg = dc_fixpt_clamp_u0d14(rgb->green);
276294
rgb->blue_reg = dc_fixpt_clamp_u0d14(rgb->blue);

drivers/gpu/drm/amd/display/dc/dwb/dcn30/dcn30_cm_common.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ void cm_helper_program_gamcor_xfer_func(
5959
const struct pwl_params *params,
6060
const struct dcn3_xfer_func_reg *reg);
6161

62-
bool cm3_helper_translate_curve_to_hw_format(
62+
bool cm3_helper_translate_curve_to_hw_format(struct dc_context *ctx,
6363
const struct dc_transfer_func *output_tf,
6464
struct pwl_params *lut_params, bool fixpoint);
6565

drivers/gpu/drm/amd/display/dc/hwss/dcn30/dcn30_hwseq.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -228,7 +228,7 @@ bool dcn30_set_blend_lut(
228228
if (plane_state->blend_tf.type == TF_TYPE_HWPWL)
229229
blend_lut = &plane_state->blend_tf.pwl;
230230
else if (plane_state->blend_tf.type == TF_TYPE_DISTRIBUTED_POINTS) {
231-
result = cm3_helper_translate_curve_to_hw_format(
231+
result = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
232232
&plane_state->blend_tf, &dpp_base->regamma_params, false);
233233
if (!result)
234234
return result;
@@ -316,8 +316,9 @@ bool dcn30_set_input_transfer_func(struct dc *dc,
316316
if (plane_state->in_transfer_func.type == TF_TYPE_HWPWL)
317317
params = &plane_state->in_transfer_func.pwl;
318318
else if (plane_state->in_transfer_func.type == TF_TYPE_DISTRIBUTED_POINTS &&
319-
cm3_helper_translate_curve_to_hw_format(&plane_state->in_transfer_func,
320-
&dpp_base->degamma_params, false))
319+
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
320+
&plane_state->in_transfer_func,
321+
&dpp_base->degamma_params, false))
321322
params = &dpp_base->degamma_params;
322323

323324
result = dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params);
@@ -388,7 +389,7 @@ bool dcn30_set_output_transfer_func(struct dc *dc,
388389
params = &stream->out_transfer_func.pwl;
389390
else if (pipe_ctx->stream->out_transfer_func.type ==
390391
TF_TYPE_DISTRIBUTED_POINTS &&
391-
cm3_helper_translate_curve_to_hw_format(
392+
cm3_helper_translate_curve_to_hw_format(stream->ctx,
392393
&stream->out_transfer_func,
393394
&mpc->blender_params, false))
394395
params = &mpc->blender_params;

drivers/gpu/drm/amd/display/dc/hwss/dcn32/dcn32_hwseq.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -483,8 +483,9 @@ bool dcn32_set_mcm_luts(
483483
if (plane_state->blend_tf.type == TF_TYPE_HWPWL)
484484
lut_params = &plane_state->blend_tf.pwl;
485485
else if (plane_state->blend_tf.type == TF_TYPE_DISTRIBUTED_POINTS) {
486-
result = cm3_helper_translate_curve_to_hw_format(&plane_state->blend_tf,
487-
&dpp_base->regamma_params, false);
486+
result = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
487+
&plane_state->blend_tf,
488+
&dpp_base->regamma_params, false);
488489
if (!result)
489490
return result;
490491

@@ -498,9 +499,9 @@ bool dcn32_set_mcm_luts(
498499
lut_params = &plane_state->in_shaper_func.pwl;
499500
else if (plane_state->in_shaper_func.type == TF_TYPE_DISTRIBUTED_POINTS) {
500501
// TODO: dpp_base replace
501-
ASSERT(false);
502-
cm3_helper_translate_curve_to_hw_format(&plane_state->in_shaper_func,
503-
&dpp_base->shaper_params, true);
502+
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
503+
&plane_state->in_shaper_func,
504+
&dpp_base->shaper_params, true);
504505
lut_params = &dpp_base->shaper_params;
505506
}
506507

@@ -540,8 +541,9 @@ bool dcn32_set_input_transfer_func(struct dc *dc,
540541
if (plane_state->in_transfer_func.type == TF_TYPE_HWPWL)
541542
params = &plane_state->in_transfer_func.pwl;
542543
else if (plane_state->in_transfer_func.type == TF_TYPE_DISTRIBUTED_POINTS &&
543-
cm3_helper_translate_curve_to_hw_format(&plane_state->in_transfer_func,
544-
&dpp_base->degamma_params, false))
544+
cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
545+
&plane_state->in_transfer_func,
546+
&dpp_base->degamma_params, false))
545547
params = &dpp_base->degamma_params;
546548

547549
dpp_base->funcs->dpp_program_gamcor_lut(dpp_base, params);
@@ -572,7 +574,7 @@ bool dcn32_set_output_transfer_func(struct dc *dc,
572574
params = &stream->out_transfer_func.pwl;
573575
else if (pipe_ctx->stream->out_transfer_func.type ==
574576
TF_TYPE_DISTRIBUTED_POINTS &&
575-
cm3_helper_translate_curve_to_hw_format(
577+
cm3_helper_translate_curve_to_hw_format(stream->ctx,
576578
&stream->out_transfer_func,
577579
&mpc->blender_params, false))
578580
params = &mpc->blender_params;

drivers/gpu/drm/amd/display/dc/hwss/dcn401/dcn401_hwseq.c

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ void dcn401_populate_mcm_luts(struct dc *dc,
514514
if (mcm_luts.lut1d_func->type == TF_TYPE_HWPWL)
515515
m_lut_params.pwl = &mcm_luts.lut1d_func->pwl;
516516
else if (mcm_luts.lut1d_func->type == TF_TYPE_DISTRIBUTED_POINTS) {
517-
rval = cm3_helper_translate_curve_to_hw_format(
517+
rval = cm3_helper_translate_curve_to_hw_format(mpc->ctx,
518518
mcm_luts.lut1d_func,
519519
&dpp_base->regamma_params, false);
520520
m_lut_params.pwl = rval ? &dpp_base->regamma_params : NULL;
@@ -534,7 +534,7 @@ void dcn401_populate_mcm_luts(struct dc *dc,
534534
m_lut_params.pwl = &mcm_luts.shaper->pwl;
535535
else if (mcm_luts.shaper->type == TF_TYPE_DISTRIBUTED_POINTS) {
536536
ASSERT(false);
537-
rval = cm3_helper_translate_curve_to_hw_format(
537+
rval = cm3_helper_translate_curve_to_hw_format(mpc->ctx,
538538
mcm_luts.shaper,
539539
&dpp_base->regamma_params, true);
540540
m_lut_params.pwl = rval ? &dpp_base->regamma_params : NULL;
@@ -683,8 +683,9 @@ bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
683683
if (plane_state->blend_tf.type == TF_TYPE_HWPWL)
684684
lut_params = &plane_state->blend_tf.pwl;
685685
else if (plane_state->blend_tf.type == TF_TYPE_DISTRIBUTED_POINTS) {
686-
rval = cm3_helper_translate_curve_to_hw_format(&plane_state->blend_tf,
687-
&dpp_base->regamma_params, false);
686+
rval = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
687+
&plane_state->blend_tf,
688+
&dpp_base->regamma_params, false);
688689
lut_params = rval ? &dpp_base->regamma_params : NULL;
689690
}
690691
result = mpc->funcs->program_1dlut(mpc, lut_params, mpcc_id);
@@ -695,8 +696,9 @@ bool dcn401_set_mcm_luts(struct pipe_ctx *pipe_ctx,
695696
lut_params = &plane_state->in_shaper_func.pwl;
696697
else if (plane_state->in_shaper_func.type == TF_TYPE_DISTRIBUTED_POINTS) {
697698
// TODO: dpp_base replace
698-
rval = cm3_helper_translate_curve_to_hw_format(&plane_state->in_shaper_func,
699-
&dpp_base->shaper_params, true);
699+
rval = cm3_helper_translate_curve_to_hw_format(plane_state->ctx,
700+
&plane_state->in_shaper_func,
701+
&dpp_base->shaper_params, true);
700702
lut_params = rval ? &dpp_base->shaper_params : NULL;
701703
}
702704
result &= mpc->funcs->program_shaper(mpc, lut_params, mpcc_id);
@@ -730,7 +732,7 @@ bool dcn401_set_output_transfer_func(struct dc *dc,
730732
params = &stream->out_transfer_func.pwl;
731733
else if (pipe_ctx->stream->out_transfer_func.type ==
732734
TF_TYPE_DISTRIBUTED_POINTS &&
733-
cm3_helper_translate_curve_to_hw_format(
735+
cm3_helper_translate_curve_to_hw_format(stream->ctx,
734736
&stream->out_transfer_func,
735737
&mpc->blender_params, false))
736738
params = &mpc->blender_params;

0 commit comments

Comments
 (0)