mirror of
https://github.com/Ysurac/openmptcprouter.git
synced 2025-03-09 15:40:20 +00:00
Update bcm27xx 5.15 patches
This commit is contained in:
parent
b632a36fac
commit
07d07219be
849 changed files with 41663 additions and 17049 deletions
File diff suppressed because it is too large
Load diff
|
@ -1,34 +0,0 @@
|
|||
From d22b60b8219dae5e68c94902b288ebe541c07e73 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 19 May 2020 09:46:12 +0100
|
||||
Subject: [PATCH 249/634] brcmfmac: BCM43436 needs dedicated firmware
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index 14b2cdafe378..60f4e689ef14 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -616,6 +616,7 @@ BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
|
||||
BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
|
||||
BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
|
||||
BRCMF_FW_DEF(43430A0, "brcmfmac43430a0-sdio");
|
||||
+BRCMF_FW_DEF(43436, "brcmfmac43436-sdio");
|
||||
/* Note the names are not postfixed with a1 for backward compatibility */
|
||||
BRCMF_FW_CLM_DEF(43430A1, "brcmfmac43430-sdio");
|
||||
BRCMF_FW_DEF(43430B0, "brcmfmac43430b0-sdio");
|
||||
@@ -650,6 +651,8 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000002, 43430A1),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000004, 43436),
|
||||
+ BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFA, 43430A1),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFC, 43430B0),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0x00000200, 43456),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFDC0, 43455),
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,183 +0,0 @@
|
|||
From 85e00aae3a83bd2141aa251648f6e0a7416097b0 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 8 Oct 2020 14:44:08 +0200
|
||||
Subject: [PATCH 340/634] drm/atomic: Pass the full state to CRTC atomic
|
||||
enable/disable
|
||||
|
||||
Commit 351f950db4ab28c321a1bd4b92e4bb03e34c4703 upstream.
|
||||
|
||||
If the CRTC driver ever needs to access the full DRM state, it can't do so
|
||||
at atomic_enable / atomic_disable time since drm_atomic_helper_swap_state
|
||||
will have cleared the pointer from the struct drm_crtc_state to the struct
|
||||
drm_atomic_state before calling those hooks.
|
||||
|
||||
In order to allow that, let's pass the full DRM state to atomic_enable and
|
||||
atomic_disable. The conversion was done using the coccinelle script below,
|
||||
built tested on all the drivers and actually tested on vc4.
|
||||
|
||||
virtual report
|
||||
|
||||
@@
|
||||
struct drm_crtc_helper_funcs *FUNCS;
|
||||
identifier dev, state;
|
||||
identifier crtc, crtc_state;
|
||||
@@
|
||||
|
||||
disable_outputs(struct drm_device *dev, struct drm_atomic_state *state)
|
||||
{
|
||||
<...
|
||||
- FUNCS->atomic_disable(crtc, crtc_state);
|
||||
+ FUNCS->atomic_disable(crtc, state);
|
||||
...>
|
||||
}
|
||||
|
||||
@@
|
||||
struct drm_crtc_helper_funcs *FUNCS;
|
||||
identifier dev, state;
|
||||
identifier crtc, crtc_state;
|
||||
@@
|
||||
|
||||
drm_atomic_helper_commit_modeset_enables(struct drm_device *dev, struct drm_atomic_state *state)
|
||||
{
|
||||
<...
|
||||
- FUNCS->atomic_enable(crtc, crtc_state);
|
||||
+ FUNCS->atomic_enable(crtc, state);
|
||||
...>
|
||||
}
|
||||
|
||||
@@
|
||||
identifier crtc, old_state;
|
||||
@@
|
||||
|
||||
struct drm_crtc_helper_funcs {
|
||||
...
|
||||
- void (*atomic_enable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
|
||||
+ void (*atomic_enable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
|
||||
...
|
||||
- void (*atomic_disable)(struct drm_crtc *crtc, struct drm_crtc_state *old_state);
|
||||
+ void (*atomic_disable)(struct drm_crtc *crtc, struct drm_atomic_state *state);
|
||||
...
|
||||
}
|
||||
|
||||
@ crtc_atomic_func @
|
||||
identifier helpers;
|
||||
identifier func;
|
||||
@@
|
||||
|
||||
(
|
||||
static struct drm_crtc_helper_funcs helpers = {
|
||||
...,
|
||||
.atomic_enable = func,
|
||||
...,
|
||||
};
|
||||
|
|
||||
static struct drm_crtc_helper_funcs helpers = {
|
||||
...,
|
||||
.atomic_disable = func,
|
||||
...,
|
||||
};
|
||||
)
|
||||
|
||||
@ ignores_old_state @
|
||||
identifier crtc_atomic_func.func;
|
||||
identifier crtc, old_state;
|
||||
@@
|
||||
|
||||
void func(struct drm_crtc *crtc,
|
||||
struct drm_crtc_state *old_state)
|
||||
{
|
||||
... when != old_state
|
||||
}
|
||||
|
||||
@ adds_old_state depends on crtc_atomic_func && !ignores_old_state @
|
||||
identifier crtc_atomic_func.func;
|
||||
identifier crtc, old_state;
|
||||
@@
|
||||
|
||||
void func(struct drm_crtc *crtc, struct drm_crtc_state *old_state)
|
||||
{
|
||||
+ struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state, crtc);
|
||||
...
|
||||
}
|
||||
|
||||
@ depends on crtc_atomic_func @
|
||||
identifier crtc_atomic_func.func;
|
||||
expression E;
|
||||
type T;
|
||||
@@
|
||||
|
||||
void func(...)
|
||||
{
|
||||
...
|
||||
- T state = E;
|
||||
+ T crtc_state = E;
|
||||
<+...
|
||||
- state
|
||||
+ crtc_state
|
||||
...+>
|
||||
|
||||
}
|
||||
|
||||
@ depends on crtc_atomic_func @
|
||||
identifier crtc_atomic_func.func;
|
||||
type T;
|
||||
@@
|
||||
|
||||
void func(...)
|
||||
{
|
||||
...
|
||||
- T state;
|
||||
+ T crtc_state;
|
||||
<+...
|
||||
- state
|
||||
+ crtc_state
|
||||
...+>
|
||||
|
||||
}
|
||||
|
||||
@ depends on crtc_atomic_func @
|
||||
identifier crtc_atomic_func.func;
|
||||
identifier old_state;
|
||||
identifier crtc;
|
||||
@@
|
||||
|
||||
void func(struct drm_crtc *crtc,
|
||||
- struct drm_crtc_state *old_state
|
||||
+ struct drm_atomic_state *state
|
||||
)
|
||||
{ ... }
|
||||
|
||||
@ include depends on adds_old_state @
|
||||
@@
|
||||
|
||||
#include <drm/drm_atomic.h>
|
||||
|
||||
@ no_include depends on !include && adds_old_state @
|
||||
@@
|
||||
|
||||
+ #include <drm/drm_atomic.h>
|
||||
#include <drm/...>
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/845aa10ef171fc0ea060495efef142a0c13f7870.1602161031.git-series.maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 ++
|
||||
1 file changed, 2 insertions(+)
|
||||
|
||||
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
index 768012243b44..eff9dc6029c2 100644
|
||||
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
@@ -797,6 +797,8 @@ static void dpu_crtc_disable(struct drm_crtc *crtc,
|
||||
crtc);
|
||||
struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
|
||||
struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
|
||||
+ struct drm_crtc_state *old_crtc_state = drm_atomic_get_old_crtc_state(state,
|
||||
+ crtc);
|
||||
struct drm_encoder *encoder;
|
||||
unsigned long flags;
|
||||
bool release_bandwidth = false;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,29 +0,0 @@
|
|||
From d2f01c176f70c7047340748ecab0ba3a92ab8060 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 27 Jul 2021 09:24:20 +0100
|
||||
Subject: [PATCH 480/634] SQUASH: fbmem: Use fallthrough keyword
|
||||
|
||||
Avoid a compiler warning by using the "fallthrough" pseudo-keyword in
|
||||
place of the old "/* fall through */" comment convention.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
drivers/video/fbdev/core/fbmem.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
|
||||
index f9b620f6a074..13f3eca3049a 100644
|
||||
--- a/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -1201,7 +1201,7 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
ret = fb_copyarea_user(info, ©);
|
||||
break;
|
||||
}
|
||||
- /* fall through */
|
||||
+ fallthrough;
|
||||
default:
|
||||
lock_fb_info(info);
|
||||
fb = info->fbops;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,136 +0,0 @@
|
|||
From 181abe23b615d7629365d94a2e956ca7e0e1fdc8 Mon Sep 17 00:00:00 2001
|
||||
From: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Date: Wed, 8 Sep 2021 14:56:03 +0100
|
||||
Subject: [PATCH 514/634] regulator: rpi-panel: Handle I2C errors/timing to the
|
||||
Atmel
|
||||
|
||||
The Atmel is doing some things in the I2C ISR, during which
|
||||
period it will not respond to further commands. This is
|
||||
particularly true of the POWERON command.
|
||||
|
||||
Increase delays appropriately, and retry should I2C errors be
|
||||
reported.
|
||||
|
||||
Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
---
|
||||
.../regulator/rpi-panel-attiny-regulator.c | 56 +++++++++++++++----
|
||||
1 file changed, 46 insertions(+), 10 deletions(-)
|
||||
|
||||
diff --git a/drivers/regulator/rpi-panel-attiny-regulator.c b/drivers/regulator/rpi-panel-attiny-regulator.c
|
||||
index 370b9ae363dd..00fb69efcfa2 100644
|
||||
--- a/drivers/regulator/rpi-panel-attiny-regulator.c
|
||||
+++ b/drivers/regulator/rpi-panel-attiny-regulator.c
|
||||
@@ -37,11 +37,24 @@ static const struct regmap_config attiny_regmap_config = {
|
||||
static int attiny_lcd_power_enable(struct regulator_dev *rdev)
|
||||
{
|
||||
unsigned int data;
|
||||
+ int ret, i;
|
||||
|
||||
regmap_write(rdev->regmap, REG_POWERON, 1);
|
||||
+ msleep(80);
|
||||
+
|
||||
/* Wait for nPWRDWN to go low to indicate poweron is done. */
|
||||
- regmap_read_poll_timeout(rdev->regmap, REG_PORTB, data,
|
||||
- data & BIT(0), 10, 1000000);
|
||||
+ for (i = 0; i < 20; i++) {
|
||||
+ ret = regmap_read(rdev->regmap, REG_PORTB, &data);
|
||||
+ if (!ret) {
|
||||
+ if (data & BIT(0))
|
||||
+ break;
|
||||
+ }
|
||||
+ usleep_range(10000, 12000);
|
||||
+ }
|
||||
+ usleep_range(10000, 12000);
|
||||
+
|
||||
+ if (ret)
|
||||
+ pr_err("%s: regmap_read_poll_timeout failed %d\n", __func__, ret);
|
||||
|
||||
/* Default to the same orientation as the closed source
|
||||
* firmware used for the panel. Runtime rotation
|
||||
@@ -57,23 +70,34 @@ static int attiny_lcd_power_disable(struct regulator_dev *rdev)
|
||||
{
|
||||
regmap_write(rdev->regmap, REG_PWM, 0);
|
||||
regmap_write(rdev->regmap, REG_POWERON, 0);
|
||||
- udelay(1);
|
||||
+ msleep(30);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int attiny_lcd_power_is_enabled(struct regulator_dev *rdev)
|
||||
{
|
||||
unsigned int data;
|
||||
- int ret;
|
||||
+ int ret, i;
|
||||
|
||||
- ret = regmap_read(rdev->regmap, REG_POWERON, &data);
|
||||
+ for (i = 0; i < 10; i++) {
|
||||
+ ret = regmap_read(rdev->regmap, REG_POWERON, &data);
|
||||
+ if (!ret)
|
||||
+ break;
|
||||
+ usleep_range(10000, 12000);
|
||||
+ }
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (!(data & BIT(0)))
|
||||
return 0;
|
||||
|
||||
- ret = regmap_read(rdev->regmap, REG_PORTB, &data);
|
||||
+ for (i = 0; i < 10; i++) {
|
||||
+ ret = regmap_read(rdev->regmap, REG_PORTB, &data);
|
||||
+ if (!ret)
|
||||
+ break;
|
||||
+ usleep_range(10000, 12000);
|
||||
+ }
|
||||
+
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -103,20 +127,32 @@ static int attiny_update_status(struct backlight_device *bl)
|
||||
{
|
||||
struct regmap *regmap = bl_get_data(bl);
|
||||
int brightness = bl->props.brightness;
|
||||
+ int ret, i;
|
||||
|
||||
if (bl->props.power != FB_BLANK_UNBLANK ||
|
||||
bl->props.fb_blank != FB_BLANK_UNBLANK)
|
||||
brightness = 0;
|
||||
|
||||
- return regmap_write(regmap, REG_PWM, brightness);
|
||||
+ for (i = 0; i < 10; i++) {
|
||||
+ ret = regmap_write(regmap, REG_PWM, brightness);
|
||||
+ if (!ret)
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ return ret;
|
||||
}
|
||||
|
||||
static int attiny_get_brightness(struct backlight_device *bl)
|
||||
{
|
||||
struct regmap *regmap = bl_get_data(bl);
|
||||
- int ret, brightness;
|
||||
+ int ret, brightness, i;
|
||||
+
|
||||
+ for (i = 0; i < 10; i++) {
|
||||
+ ret = regmap_read(regmap, REG_PWM, &brightness);
|
||||
+ if (!ret)
|
||||
+ break;
|
||||
+ }
|
||||
|
||||
- ret = regmap_read(regmap, REG_PWM, &brightness);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
@@ -166,7 +202,7 @@ static int attiny_i2c_probe(struct i2c_client *i2c,
|
||||
}
|
||||
|
||||
regmap_write(regmap, REG_POWERON, 0);
|
||||
- mdelay(1);
|
||||
+ msleep(30);
|
||||
|
||||
config.dev = &i2c->dev;
|
||||
config.regmap = regmap;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,81 +0,0 @@
|
|||
From 55ca80e8dec9113305389535bdae3c7495e1c460 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Fri, 17 Sep 2021 15:18:51 +0100
|
||||
Subject: [PATCH 531/634] configs: Add CAN_PEAK_USB=m
|
||||
|
||||
Add the driver for the PEAK Systems USB CAN interface.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/4583
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index c791261d7827..bbb951e55b19 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -415,6 +415,7 @@ CONFIG_CAN_MCP251X=m
|
||||
CONFIG_CAN_MCP251XFD=m
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
CONFIG_CAN_GS_USB=m
|
||||
+CONFIG_CAN_PEAK_USB=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index 219f2ac0bbee..89d4845f708f 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -416,6 +416,7 @@ CONFIG_CAN_MCP251X=m
|
||||
CONFIG_CAN_MCP251XFD=m
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
CONFIG_CAN_GS_USB=m
|
||||
+CONFIG_CAN_PEAK_USB=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 18540a4f9cd7..7804862696c1 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -409,6 +409,7 @@ CONFIG_CAN_MCP251X=m
|
||||
CONFIG_CAN_MCP251XFD=m
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
CONFIG_CAN_GS_USB=m
|
||||
+CONFIG_CAN_PEAK_USB=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index bab586713394..989aefe7a389 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -415,6 +415,7 @@ CONFIG_CAN_MCP251X=m
|
||||
CONFIG_CAN_MCP251XFD=m
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
CONFIG_CAN_GS_USB=m
|
||||
+CONFIG_CAN_PEAK_USB=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 235fecf9c903..6af6d68a8f38 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -408,6 +408,7 @@ CONFIG_CAN_VCAN=m
|
||||
CONFIG_CAN_MCP251X=m
|
||||
CONFIG_CAN_MCP251XFD=m
|
||||
CONFIG_CAN_EMS_USB=m
|
||||
+CONFIG_CAN_PEAK_USB=m
|
||||
CONFIG_BT=m
|
||||
CONFIG_BT_RFCOMM=m
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
From 114b83f158635171f718e86c1e1d48061a72e144 Mon Sep 17 00:00:00 2001
|
||||
From: Lee Jackson <info@arducam.com>
|
||||
Date: Thu, 26 Aug 2021 11:15:26 +0800
|
||||
Subject: [PATCH 557/634] configs: Add CONFIG_VIDEO_IMX519=m
|
||||
|
||||
Include the driver module for the IMX519.
|
||||
|
||||
Signed-off-by: Lee Jackson <info@arducam.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index bbb951e55b19..39a79c6a0b52 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -868,6 +868,7 @@ CONFIG_VIDEO_TW9906=m
|
||||
CONFIG_VIDEO_IMX219=m
|
||||
CONFIG_VIDEO_IMX290=m
|
||||
CONFIG_VIDEO_IMX477=m
|
||||
+CONFIG_VIDEO_IMX519=m
|
||||
CONFIG_VIDEO_OV5647=m
|
||||
CONFIG_VIDEO_OV7251=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index 89d4845f708f..2db662527444 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -882,6 +882,7 @@ CONFIG_VIDEO_TW9906=m
|
||||
CONFIG_VIDEO_IMX219=m
|
||||
CONFIG_VIDEO_IMX290=m
|
||||
CONFIG_VIDEO_IMX477=m
|
||||
+CONFIG_VIDEO_IMX519=m
|
||||
CONFIG_VIDEO_OV5647=m
|
||||
CONFIG_VIDEO_OV7251=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 7804862696c1..2f64a60e1e63 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -861,6 +861,7 @@ CONFIG_VIDEO_TW9906=m
|
||||
CONFIG_VIDEO_IMX219=m
|
||||
CONFIG_VIDEO_IMX290=m
|
||||
CONFIG_VIDEO_IMX477=m
|
||||
+CONFIG_VIDEO_IMX519=m
|
||||
CONFIG_VIDEO_OV5647=m
|
||||
CONFIG_VIDEO_OV7251=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 989aefe7a389..d1966d92664b 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -885,6 +885,7 @@ CONFIG_VIDEO_TW9906=m
|
||||
CONFIG_VIDEO_IMX219=m
|
||||
CONFIG_VIDEO_IMX290=m
|
||||
CONFIG_VIDEO_IMX477=m
|
||||
+CONFIG_VIDEO_IMX519=m
|
||||
CONFIG_VIDEO_OV5647=m
|
||||
CONFIG_VIDEO_OV7251=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 6af6d68a8f38..6b0ca5314ab3 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -807,6 +807,7 @@ CONFIG_VIDEO_TW9906=m
|
||||
CONFIG_VIDEO_IMX219=m
|
||||
CONFIG_VIDEO_IMX290=m
|
||||
CONFIG_VIDEO_IMX477=m
|
||||
+CONFIG_VIDEO_IMX519=m
|
||||
CONFIG_VIDEO_OV5647=m
|
||||
CONFIG_VIDEO_OV7251=m
|
||||
CONFIG_VIDEO_OV7640=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
From 3b480e2bf556dc77cb25d5fb2d3f7b203d3d6e37 Mon Sep 17 00:00:00 2001
|
||||
From: Sten Spans <sten@sp5.nl>
|
||||
Date: Tue, 12 Oct 2021 20:10:00 +0200
|
||||
Subject: [PATCH 563/634] Add module for 8111h chip used in various CM4 boards
|
||||
|
||||
---
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
2 files changed, 2 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index 2db662527444..c1d7afb36a2e 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -509,6 +509,7 @@ CONFIG_BCMGENET=y
|
||||
CONFIG_ENC28J60=m
|
||||
CONFIG_QCA7000_SPI=m
|
||||
CONFIG_QCA7000_UART=m
|
||||
+CONFIG_R8169=m
|
||||
CONFIG_WIZNET_W5100=m
|
||||
CONFIG_WIZNET_W5100_SPI=m
|
||||
CONFIG_MICREL_PHY=y
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index d1966d92664b..234e68865bff 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -506,6 +506,7 @@ CONFIG_BCMGENET=y
|
||||
CONFIG_ENC28J60=m
|
||||
CONFIG_QCA7000_SPI=m
|
||||
CONFIG_QCA7000_UART=m
|
||||
+CONFIG_R8169=m
|
||||
CONFIG_WIZNET_W5100=m
|
||||
CONFIG_WIZNET_W5100_SPI=m
|
||||
CONFIG_MICREL_PHY=y
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,82 +0,0 @@
|
|||
From 0c4c7f1f2321ec48fc1c67da167907a861d48774 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Mon, 18 Oct 2021 16:39:11 +0100
|
||||
Subject: [PATCH 570/634] config: Enable FSFS_FS_SECURITY
|
||||
|
||||
Add a negligible amount of core kernel code for capability-based
|
||||
access control on F2FS.
|
||||
|
||||
See: https://github.com/raspberrypi/linux/issues/2778
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 39a79c6a0b52..77553d32412e 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1320,6 +1320,7 @@ CONFIG_BTRFS_FS=m
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=y
|
||||
+CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_FS_ENCRYPTION=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QFMT_V1=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index c1d7afb36a2e..a15b3e0a02f6 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -1359,6 +1359,7 @@ CONFIG_BTRFS_FS=m
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=y
|
||||
+CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_FS_ENCRYPTION=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QFMT_V1=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 2f64a60e1e63..f1a78aa3966c 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -1331,6 +1331,7 @@ CONFIG_BTRFS_FS=m
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=y
|
||||
+CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QFMT_V1=m
|
||||
CONFIG_QFMT_V2=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 234e68865bff..2a7e9aaf2b4d 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -1368,6 +1368,7 @@ CONFIG_BTRFS_FS=m
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=y
|
||||
+CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_FS_ENCRYPTION=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QFMT_V1=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 6b0ca5314ab3..f16857163068 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -1217,6 +1217,7 @@ CONFIG_BTRFS_FS=m
|
||||
CONFIG_BTRFS_FS_POSIX_ACL=y
|
||||
CONFIG_NILFS2_FS=m
|
||||
CONFIG_F2FS_FS=y
|
||||
+CONFIG_F2FS_FS_SECURITY=y
|
||||
CONFIG_FS_ENCRYPTION=y
|
||||
CONFIG_FANOTIFY=y
|
||||
CONFIG_QFMT_V1=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 50a03c2090d1d6631a66764669ef1bd392dcb1fa Mon Sep 17 00:00:00 2001
|
||||
From: Dom Cobley <popcornmix@gmail.com>
|
||||
Date: Wed, 20 Oct 2021 16:47:09 +0100
|
||||
Subject: [PATCH 572/634] Revert "drm/atomic: Pass the full state to CRTC
|
||||
atomic enable/disable"
|
||||
|
||||
This reverts commit a40d37ed7f14b152d098532802d2a676b76d145c.
|
||||
---
|
||||
drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
index eff9dc6029c2..768012243b44 100644
|
||||
--- a/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
+++ b/drivers/gpu/drm/msm/disp/dpu1/dpu_crtc.c
|
||||
@@ -797,8 +797,6 @@ static void dpu_crtc_disable(struct drm_crtc *crtc,
|
||||
crtc);
|
||||
struct dpu_crtc *dpu_crtc = to_dpu_crtc(crtc);
|
||||
struct dpu_crtc_state *cstate = to_dpu_crtc_state(crtc->state);
|
||||
- struct drm_crtc_state *old_crtc_state = drm_atomic_get_old_crtc_state(state,
|
||||
- crtc);
|
||||
struct drm_encoder *encoder;
|
||||
unsigned long flags;
|
||||
bool release_bandwidth = false;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
From 0474407795d611cea0108e7ef21190512a992353 Mon Sep 17 00:00:00 2001
|
||||
From: Erik Tagirov <tgsc2009@gmail.com>
|
||||
Date: Wed, 20 Oct 2021 09:51:26 +0200
|
||||
Subject: [PATCH 573/634] configs: Add CONFIG_FB_SIMPLE to bcmrpi3_defconfig
|
||||
|
||||
See: https://github.com/raspberrypi/linux/pull/4640
|
||||
|
||||
Signed-off-by: Erik Tagirov <erik@tagirov.ch>
|
||||
---
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index f16857163068..b252255397fa 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -829,6 +829,7 @@ CONFIG_DRM_GUD=m
|
||||
CONFIG_FB=y
|
||||
CONFIG_FB_BCM2708=y
|
||||
CONFIG_FB_UDL=m
|
||||
+CONFIG_FB_SIMPLE=y
|
||||
CONFIG_FB_SSD1307=m
|
||||
CONFIG_FB_RPISENSE=m
|
||||
CONFIG_BACKLIGHT_RPI=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,41 +0,0 @@
|
|||
From e84199df6a504860f7e2b14008bee6f674f6f1c7 Mon Sep 17 00:00:00 2001
|
||||
From: John Cox <jc@kynesim.co.uk>
|
||||
Date: Fri, 22 Oct 2021 13:11:38 +0100
|
||||
Subject: [PATCH 583/634] media: bcm2835-codec: Limit video callbacks
|
||||
|
||||
Limit the number of allowed video callbacks. This helps with limiting
|
||||
the size of the coded input FIFO which in turn helps to control latency.
|
||||
Choose -5 as the magic number as it translates to DPB+5 buffers which
|
||||
has been proven to be a good number in the past.
|
||||
|
||||
Ideally coded buffers would not be returned to the user until they
|
||||
had been decoded into the DPB or been discarded as bad, but that grade
|
||||
of control is unavailable to us.
|
||||
|
||||
Signed-off-by: John Cox <jc@kynesim.co.uk>
|
||||
---
|
||||
.../vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c | 8 ++++++++
|
||||
1 file changed, 8 insertions(+)
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
index 6078d6e2ace0..e8452c82d088 100644
|
||||
--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
+++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
@@ -2510,6 +2510,14 @@ static int bcm2835_codec_create_component(struct bcm2835_codec_ctx *ctx)
|
||||
MMAL_PARAMETER_VIDEO_STOP_ON_PAR_COLOUR_CHANGE,
|
||||
&enable,
|
||||
sizeof(enable));
|
||||
+
|
||||
+ enable = (unsigned int)-5;
|
||||
+ vchiq_mmal_port_parameter_set(dev->instance,
|
||||
+ &ctx->component->control,
|
||||
+ MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS,
|
||||
+ &enable,
|
||||
+ sizeof(enable));
|
||||
+
|
||||
} else if (dev->role == DEINTERLACE) {
|
||||
/* Select the default deinterlace algorithm. */
|
||||
int half_framerate = 0;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,34 +0,0 @@
|
|||
From 4e102e98bf30c8337b329a86cfceb6a97e397e91 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 2 Nov 2021 16:53:20 +0000
|
||||
Subject: [PATCH 605/634] Revert "brcmfmac: BCM43436 needs dedicated firmware"
|
||||
|
||||
This reverts commit 0a2690fa8c3a0b356a0cf5fc63c2428264ead0e7.
|
||||
---
|
||||
drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
index fd1a09228f9a..6bcaa402a356 100644
|
||||
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/sdio.c
|
||||
@@ -616,7 +616,6 @@ BRCMF_FW_DEF(4335, "brcmfmac4335-sdio");
|
||||
BRCMF_FW_DEF(43362, "brcmfmac43362-sdio");
|
||||
BRCMF_FW_DEF(4339, "brcmfmac4339-sdio");
|
||||
BRCMF_FW_DEF(43430A0, "brcmfmac43430a0-sdio");
|
||||
-BRCMF_FW_DEF(43436, "brcmfmac43436-sdio");
|
||||
/* Note the names are not postfixed with a1 for backward compatibility */
|
||||
BRCMF_FW_CLM_DEF(43430A1, "brcmfmac43430-sdio");
|
||||
BRCMF_FW_DEF(43430B0, "brcmfmac43430b0-sdio");
|
||||
@@ -651,8 +650,6 @@ static const struct brcmf_firmware_mapping brcmf_sdio_fwnames[] = {
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4339_CHIP_ID, 0xFFFFFFFF, 4339),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000001, 43430A0),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000002, 43430A1),
|
||||
- BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0x00000004, 43436),
|
||||
- BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFA, 43430A1),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_43430_CHIP_ID, 0xFFFFFFFC, 43430B0),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0x00000200, 43456),
|
||||
BRCMF_FW_ENTRY(BRCM_CC_4345_CHIP_ID, 0xFFFFFDC0, 43455),
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,117 +0,0 @@
|
|||
From bc1237c403e9b95446a9c1da36d0ba83b5421aae Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Wed, 10 Nov 2021 09:48:50 +0000
|
||||
Subject: [PATCH 617/634] configs: Regenerate defconfigs
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 2 +-
|
||||
arch/arm/configs/bcm2711_defconfig | 2 +-
|
||||
arch/arm/configs/bcmrpi_defconfig | 2 +-
|
||||
arch/arm64/configs/bcm2711_defconfig | 2 +-
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 2 +-
|
||||
5 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 77553d32412e..b3b1cb8fec95 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -55,7 +55,6 @@ CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
-CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_CRYPTO_SHA1_ARM_NEON=m
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
CONFIG_CRYPTO_AES_ARM_BS=m
|
||||
@@ -446,6 +445,7 @@ CONFIG_NFC=m
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
+CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_BLOCK2MTD=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index a15b3e0a02f6..ee616a188ca4 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -55,7 +55,6 @@ CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_KERNEL_MODE_NEON=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
-CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_CRYPTO_SHA1_ARM_NEON=m
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
CONFIG_CRYPTO_AES_ARM_BS=m
|
||||
@@ -452,6 +451,7 @@ CONFIG_PCIE_BRCMSTB=y
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
+CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_BLOCK2MTD=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index f1a78aa3966c..ec5810249709 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -50,7 +50,6 @@ CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
CONFIG_VFP=y
|
||||
# CONFIG_SUSPEND is not set
|
||||
-CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_CRYPTO_SHA1_ARM=m
|
||||
CONFIG_CRYPTO_AES_ARM=m
|
||||
CONFIG_JUMP_LABEL=y
|
||||
@@ -440,6 +439,7 @@ CONFIG_NFC=m
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
+CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_BLOCK2MTD=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 2a7e9aaf2b4d..56718edb5c54 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -54,7 +54,6 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
-CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_VIRTUALIZATION=y
|
||||
CONFIG_KVM=y
|
||||
CONFIG_CRYPTO_AES_ARM64_BS=m
|
||||
@@ -448,6 +447,7 @@ CONFIG_PCIE_BRCMSTB=y
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
+CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_BLOCK2MTD=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index b252255397fa..29d98dc91225 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -58,7 +58,6 @@ CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y
|
||||
CONFIG_CPUFREQ_DT=y
|
||||
CONFIG_ARM_RASPBERRYPI_CPUFREQ=y
|
||||
-CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_CRYPTO_AES_ARM64_BS=m
|
||||
CONFIG_JUMP_LABEL=y
|
||||
CONFIG_MODULES=y
|
||||
@@ -439,6 +438,7 @@ CONFIG_NFC=m
|
||||
CONFIG_UEVENT_HELPER=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
+CONFIG_RASPBERRYPI_FIRMWARE=y
|
||||
CONFIG_MTD=m
|
||||
CONFIG_MTD_BLOCK=m
|
||||
CONFIG_MTD_UBI=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,80 +0,0 @@
|
|||
From 911f564b3e2abacd0398650c77566d425c735e2c Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Wed, 10 Nov 2021 09:52:22 +0000
|
||||
Subject: [PATCH 618/634] configs: Add NTFS3 support
|
||||
|
||||
ntfs3 provides improved support for NTFS filesystems without the
|
||||
performance hit of a userspace FUSE filesystem.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index b3b1cb8fec95..9b8c3c694f89 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1342,6 +1342,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_EXFAT_FS=m
|
||||
CONFIG_NTFS_FS=m
|
||||
CONFIG_NTFS_RW=y
|
||||
+CONFIG_NTFS3_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_ECRYPT_FS=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index ee616a188ca4..a0bf8b4afc2e 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -1381,6 +1381,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_EXFAT_FS=m
|
||||
CONFIG_NTFS_FS=m
|
||||
CONFIG_NTFS_RW=y
|
||||
+CONFIG_NTFS3_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_ECRYPT_FS=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index ec5810249709..7ee5b836df89 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -1352,6 +1352,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_EXFAT_FS=m
|
||||
CONFIG_NTFS_FS=m
|
||||
CONFIG_NTFS_RW=y
|
||||
+CONFIG_NTFS3_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_ECRYPT_FS=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 56718edb5c54..3b4fb78dce75 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -1390,6 +1390,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_EXFAT_FS=m
|
||||
CONFIG_NTFS_FS=m
|
||||
CONFIG_NTFS_RW=y
|
||||
+CONFIG_NTFS3_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_ECRYPT_FS=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 29d98dc91225..38fff49a5951 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -1240,6 +1240,7 @@ CONFIG_FAT_DEFAULT_IOCHARSET="ascii"
|
||||
CONFIG_EXFAT_FS=m
|
||||
CONFIG_NTFS_FS=m
|
||||
CONFIG_NTFS_RW=y
|
||||
+CONFIG_NTFS3_FS=m
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_ECRYPT_FS=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
From c7407e8aeeff18e65c8942e56474ad123bea19c3 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Wed, 10 Nov 2021 09:54:35 +0000
|
||||
Subject: [PATCH 619/634] configs: Add kernel SMB3 server support
|
||||
|
||||
Enable the in-kernel (module) SMB3 server.
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 9b8c3c694f89..4da927bf5ef9 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1371,6 +1371,7 @@ CONFIG_CIFS_UPCALL=y
|
||||
CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
+CONFIG_SMB_SERVER=m
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index a0bf8b4afc2e..d4560a472500 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -1411,6 +1411,7 @@ CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_POSIX=y
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
+CONFIG_SMB_SERVER=m
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 7ee5b836df89..2dd6629d7e61 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -1381,6 +1381,7 @@ CONFIG_CIFS_UPCALL=y
|
||||
CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
+CONFIG_SMB_SERVER=m
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 3b4fb78dce75..e09fb606b4f1 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -1420,6 +1420,7 @@ CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_POSIX=y
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
+CONFIG_SMB_SERVER=m
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 38fff49a5951..82c996f54a8d 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -1269,6 +1269,7 @@ CONFIG_CIFS_UPCALL=y
|
||||
CONFIG_CIFS_XATTR=y
|
||||
CONFIG_CIFS_DFS_UPCALL=y
|
||||
CONFIG_CIFS_FSCACHE=y
|
||||
+CONFIG_SMB_SERVER=m
|
||||
CONFIG_9P_FS=m
|
||||
CONFIG_9P_FS_POSIX_ACL=y
|
||||
CONFIG_NLS_DEFAULT="utf8"
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,32 +0,0 @@
|
|||
From 461a10651749985a42f7c77918977c50546ad700 Mon Sep 17 00:00:00 2001
|
||||
From: Dom Cobley <popcornmix@gmail.com>
|
||||
Date: Tue, 9 Nov 2021 00:14:16 +0000
|
||||
Subject: [PATCH 620/634] Revert "media: bcm2835-codec: Limit video callbacks"
|
||||
|
||||
This reverts commit f7abe646a35b6f873abc88c47be2651472793823.
|
||||
---
|
||||
.../vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c | 8 --------
|
||||
1 file changed, 8 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
index 351d693873ed..97c8afa0861e 100644
|
||||
--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
+++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c
|
||||
@@ -2505,14 +2505,6 @@ static int bcm2835_codec_create_component(struct bcm2835_codec_ctx *ctx)
|
||||
MMAL_PARAMETER_VIDEO_STOP_ON_PAR_COLOUR_CHANGE,
|
||||
&enable,
|
||||
sizeof(enable));
|
||||
-
|
||||
- enable = (unsigned int)-5;
|
||||
- vchiq_mmal_port_parameter_set(dev->instance,
|
||||
- &ctx->component->control,
|
||||
- MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS,
|
||||
- &enable,
|
||||
- sizeof(enable));
|
||||
-
|
||||
} else if (dev->role == DEINTERLACE) {
|
||||
/* Select the default deinterlace algorithm. */
|
||||
int half_framerate = 0;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,77 +0,0 @@
|
|||
From c0eda3e991db19a5aa49f2b4aca7ebc3016abf02 Mon Sep 17 00:00:00 2001
|
||||
From: arturo182 <arturo182@tlen.pl>
|
||||
Date: Tue, 9 Nov 2021 16:21:56 +0100
|
||||
Subject: [PATCH 621/634] config: Set TCA8418 to module
|
||||
|
||||
This chip is a popular way to add a matrix keyboard using I2C.
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 4da927bf5ef9..3f59b647b343 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -602,6 +602,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index d4560a472500..63c41e541c54 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -615,6 +615,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 2dd6629d7e61..50d5473c1c2d 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -596,6 +596,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index e09fb606b4f1..3aca18f64f56 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -612,6 +612,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 82c996f54a8d..4e7296ad96c2 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -591,6 +591,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
From 05a94dbdd59e69c36d21591e3459705b847a62b9 Mon Sep 17 00:00:00 2001
|
||||
From: VMsunghwan <jsh970307@daum.net>
|
||||
Date: Tue, 16 Nov 2021 03:24:36 +0900
|
||||
Subject: [PATCH 623/634] configs: Add TCA6416 driver module
|
||||
|
||||
Add a matrix keyboard on I2C
|
||||
|
||||
See: https://github.com/raspberrypi/linux/pull/4700
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 3f59b647b343..42fe6bd471b2 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -602,6 +602,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA6416=m
|
||||
CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index 63c41e541c54..bf5ff05815f0 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -615,6 +615,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA6416=m
|
||||
CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index 50d5473c1c2d..f1c54effdce2 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -596,6 +596,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA6416=m
|
||||
CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 3aca18f64f56..cd77617fbcfb 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -612,6 +612,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA6416=m
|
||||
CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 4e7296ad96c2..5a8cc83a7386 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -591,6 +591,7 @@ CONFIG_INPUT_JOYDEV=m
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=m
|
||||
+CONFIG_KEYBOARD_TCA6416=m
|
||||
CONFIG_KEYBOARD_TCA8418=m
|
||||
CONFIG_KEYBOARD_MATRIX=m
|
||||
CONFIG_KEYBOARD_CAP11XX=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,70 +0,0 @@
|
|||
From 203e924caade8c8baa6ff32ff91cdff7af9c949b Mon Sep 17 00:00:00 2001
|
||||
From: Sean McAvoy <seanmcavoy@gmail.com>
|
||||
Date: Fri, 19 Nov 2021 02:36:24 -0500
|
||||
Subject: [PATCH 630/634] enable several virtual devices for hosting virtual
|
||||
machines
|
||||
|
||||
---
|
||||
arch/arm64/configs/bcm2711_defconfig | 3 +++
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 3 +++
|
||||
2 files changed, 6 insertions(+)
|
||||
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index cd77617fbcfb..a5c41d4bdc1e 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -393,6 +393,7 @@ CONFIG_NET_ACT_SKBEDIT=m
|
||||
CONFIG_NET_ACT_CSUM=m
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_OPENVSWITCH=m
|
||||
+CONFIG_VSOCKETS=m
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_NET_PKTGEN=m
|
||||
CONFIG_HAMRADIO=y
|
||||
@@ -502,6 +503,7 @@ CONFIG_NETCONSOLE=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_VETH=m
|
||||
CONFIG_NET_VRF=m
|
||||
+CONFIG_VSOCKMON=m
|
||||
CONFIG_BCMGENET=y
|
||||
CONFIG_ENC28J60=m
|
||||
CONFIG_QCA7000_SPI=m
|
||||
@@ -1272,6 +1274,7 @@ CONFIG_HD44780=m
|
||||
CONFIG_UIO=m
|
||||
CONFIG_UIO_PDRV_GENIRQ=m
|
||||
CONFIG_VHOST_NET=m
|
||||
+CONFIG_VHOST_VSOCK=m
|
||||
CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_PRISM2_USB=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 5a8cc83a7386..05f1eba91510 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -388,6 +388,7 @@ CONFIG_NET_ACT_SKBEDIT=m
|
||||
CONFIG_NET_ACT_CSUM=m
|
||||
CONFIG_BATMAN_ADV=m
|
||||
CONFIG_OPENVSWITCH=m
|
||||
+CONFIG_VSOCKETS=m
|
||||
CONFIG_CGROUP_NET_PRIO=y
|
||||
CONFIG_NET_PKTGEN=m
|
||||
CONFIG_HAMRADIO=y
|
||||
@@ -487,6 +488,7 @@ CONFIG_NETCONSOLE=m
|
||||
CONFIG_TUN=m
|
||||
CONFIG_VETH=m
|
||||
CONFIG_NET_VRF=m
|
||||
+CONFIG_VSOCKMON=m
|
||||
CONFIG_ENC28J60=m
|
||||
CONFIG_QCA7000_SPI=m
|
||||
CONFIG_QCA7000_UART=m
|
||||
@@ -1133,6 +1135,7 @@ CONFIG_DMABUF_HEAPS_SYSTEM=y
|
||||
CONFIG_DMABUF_HEAPS_CMA=y
|
||||
CONFIG_UIO=m
|
||||
CONFIG_UIO_PDRV_GENIRQ=m
|
||||
+CONFIG_VHOST_VSOCK=m
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_PRISM2_USB=m
|
||||
CONFIG_R8712U=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,95 +0,0 @@
|
|||
From 0360e2aa85e7fd2cc249b2aac178018d53f61a31 Mon Sep 17 00:00:00 2001
|
||||
From: Ilya Trukhanov <lahvuun@gmail.com>
|
||||
Date: Sat, 20 Nov 2021 16:26:36 +0200
|
||||
Subject: [PATCH 632/634] configs: add CONFIG_HID_PLAYSTATION=m and
|
||||
CONFIG_PLAYSTATION_FF=y
|
||||
|
||||
Enables support for the PlayStation 5 'DualSense' controller and its
|
||||
force feedback.
|
||||
|
||||
Also, Sony is planning to move PlayStation peripheral support from
|
||||
hid-sony into hid-playstation in the future:
|
||||
https://lore.kernel.org/all/20201219062336.72568-1-roderick@gaikai.com/
|
||||
|
||||
This means that, potentially, in future kernel releases older
|
||||
PlayStation controllers may stop working without this option. As
|
||||
Raspberry Pis are a popular choice as emulation consoles, it is probably
|
||||
a good idea to enable this.
|
||||
|
||||
Signed-off-by: Ilya Trukhanov <lahvuun@gmail.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 2 ++
|
||||
arch/arm/configs/bcm2711_defconfig | 2 ++
|
||||
arch/arm/configs/bcmrpi_defconfig | 2 ++
|
||||
arch/arm64/configs/bcm2711_defconfig | 2 ++
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 2 ++
|
||||
5 files changed, 10 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 42fe6bd471b2..cd4148fcdc4b 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1022,6 +1022,8 @@ CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_PICOLCD=m
|
||||
+CONFIG_HID_PLAYSTATION=m
|
||||
+CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SONY=m
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index bf5ff05815f0..6cceda505484 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -1038,6 +1038,8 @@ CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_PICOLCD=m
|
||||
+CONFIG_HID_PLAYSTATION=m
|
||||
+CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SONY=m
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index f1c54effdce2..f7d84b00778e 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -1015,6 +1015,8 @@ CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_PICOLCD=m
|
||||
+CONFIG_HID_PLAYSTATION=m
|
||||
+CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SONY=m
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index a5c41d4bdc1e..00aa6d7ebb36 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -1043,6 +1043,8 @@ CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_PICOLCD=m
|
||||
+CONFIG_HID_PLAYSTATION=m
|
||||
+CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SONY=m
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 05f1eba91510..2a319d0550a2 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -941,6 +941,8 @@ CONFIG_HID_ORTEK=m
|
||||
CONFIG_HID_PANTHERLORD=m
|
||||
CONFIG_HID_PETALYNX=m
|
||||
CONFIG_HID_PICOLCD=m
|
||||
+CONFIG_HID_PLAYSTATION=m
|
||||
+CONFIG_PLAYSTATION_FF=y
|
||||
CONFIG_HID_ROCCAT=m
|
||||
CONFIG_HID_SAMSUNG=m
|
||||
CONFIG_HID_SONY=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,79 +0,0 @@
|
|||
From 436be1a460d6fd67e8aaabcc33b1f6ac12eaf1d0 Mon Sep 17 00:00:00 2001
|
||||
From: Michael Heimpold <mhei@heimpold.de>
|
||||
Date: Thu, 4 Nov 2021 23:09:07 +0100
|
||||
Subject: [PATCH 633/634] configs: add LEDS_PWM=y
|
||||
|
||||
Enable support for PWM driven LEDs.
|
||||
|
||||
Signed-off-by: Michael Heimpold <mhei@heimpold.de>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 1 +
|
||||
arch/arm/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm/configs/bcmrpi_defconfig | 1 +
|
||||
arch/arm64/configs/bcm2711_defconfig | 1 +
|
||||
arch/arm64/configs/bcmrpi3_defconfig | 1 +
|
||||
5 files changed, 5 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index cd4148fcdc4b..317b0018d6e2 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1169,6 +1169,7 @@ CONFIG_LEDS_PCA9532=m
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
+CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_IS31FL32XX=m
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=y
|
||||
diff --git a/arch/arm/configs/bcm2711_defconfig b/arch/arm/configs/bcm2711_defconfig
|
||||
index 6cceda505484..94d15dfe2793 100644
|
||||
--- a/arch/arm/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm/configs/bcm2711_defconfig
|
||||
@@ -1206,6 +1206,7 @@ CONFIG_LEDS_PCA9532=m
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
+CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_IS31FL32XX=m
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=y
|
||||
diff --git a/arch/arm/configs/bcmrpi_defconfig b/arch/arm/configs/bcmrpi_defconfig
|
||||
index f7d84b00778e..95a11f27dfad 100644
|
||||
--- a/arch/arm/configs/bcmrpi_defconfig
|
||||
+++ b/arch/arm/configs/bcmrpi_defconfig
|
||||
@@ -1180,6 +1180,7 @@ CONFIG_LEDS_PCA9532=m
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
+CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_IS31FL32XX=m
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=y
|
||||
diff --git a/arch/arm64/configs/bcm2711_defconfig b/arch/arm64/configs/bcm2711_defconfig
|
||||
index 00aa6d7ebb36..0fffa3b4f72b 100644
|
||||
--- a/arch/arm64/configs/bcm2711_defconfig
|
||||
+++ b/arch/arm64/configs/bcm2711_defconfig
|
||||
@@ -1211,6 +1211,7 @@ CONFIG_LEDS_PCA9532=m
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
+CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_IS31FL32XX=m
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=y
|
||||
diff --git a/arch/arm64/configs/bcmrpi3_defconfig b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
index 2a319d0550a2..c4dff0b42461 100644
|
||||
--- a/arch/arm64/configs/bcmrpi3_defconfig
|
||||
+++ b/arch/arm64/configs/bcmrpi3_defconfig
|
||||
@@ -1075,6 +1075,7 @@ CONFIG_LEDS_PCA9532=m
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_PCA955X=m
|
||||
CONFIG_LEDS_PCA963X=m
|
||||
+CONFIG_LEDS_PWM=y
|
||||
CONFIG_LEDS_IS31FL32XX=m
|
||||
CONFIG_LEDS_TRIGGER_TIMER=y
|
||||
CONFIG_LEDS_TRIGGER_ONESHOT=y
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,47 +0,0 @@
|
|||
From e9c66cd367f00c9384ddc651567db7df48054115 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Mon, 22 Nov 2021 10:28:55 +0000
|
||||
Subject: [PATCH 634/634] configs: Add USB gadget support (for Zero 2 W)
|
||||
|
||||
Bring the Pi 3 kernel in line with the Pi Zero and Pi 4 by enabling
|
||||
USB gadget support, which is useful on Zero 2 W.
|
||||
|
||||
See: https://github.com/raspberrypi/firmware/issues/1654
|
||||
|
||||
Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
||||
---
|
||||
arch/arm/configs/bcm2709_defconfig | 18 ++++++++++++++++++
|
||||
1 file changed, 18 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/configs/bcm2709_defconfig b/arch/arm/configs/bcm2709_defconfig
|
||||
index 317b0018d6e2..e844c6d60011 100644
|
||||
--- a/arch/arm/configs/bcm2709_defconfig
|
||||
+++ b/arch/arm/configs/bcm2709_defconfig
|
||||
@@ -1143,6 +1143,24 @@ CONFIG_USB_UEAGLEATM=m
|
||||
CONFIG_USB_XUSBATM=m
|
||||
CONFIG_NOP_USB_XCEIV=y
|
||||
CONFIG_USB_GADGET=y
|
||||
+CONFIG_USB_CONFIGFS=m
|
||||
+CONFIG_USB_CONFIGFS_SERIAL=y
|
||||
+CONFIG_USB_CONFIGFS_ACM=y
|
||||
+CONFIG_USB_CONFIGFS_OBEX=y
|
||||
+CONFIG_USB_CONFIGFS_NCM=y
|
||||
+CONFIG_USB_CONFIGFS_ECM=y
|
||||
+CONFIG_USB_CONFIGFS_ECM_SUBSET=y
|
||||
+CONFIG_USB_CONFIGFS_RNDIS=y
|
||||
+CONFIG_USB_CONFIGFS_EEM=y
|
||||
+CONFIG_USB_CONFIGFS_MASS_STORAGE=y
|
||||
+CONFIG_USB_CONFIGFS_F_LB_SS=y
|
||||
+CONFIG_USB_CONFIGFS_F_FS=y
|
||||
+CONFIG_USB_CONFIGFS_F_UAC1=y
|
||||
+CONFIG_USB_CONFIGFS_F_UAC2=y
|
||||
+CONFIG_USB_CONFIGFS_F_MIDI=y
|
||||
+CONFIG_USB_CONFIGFS_F_HID=y
|
||||
+CONFIG_USB_CONFIGFS_F_UVC=y
|
||||
+CONFIG_USB_CONFIGFS_F_PRINTER=y
|
||||
CONFIG_USB_ZERO=m
|
||||
CONFIG_USB_AUDIO=m
|
||||
CONFIG_USB_ETH=m
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -0,0 +1,111 @@
|
|||
From f959ee9d0bfbcb747a74458e79157db37817d390 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 15:59:29 +0200
|
||||
Subject: [PATCH 001/828] drm/vc4: hdmi: Split the CEC disable / enable
|
||||
functions in two
|
||||
|
||||
In order to ease further additions to the CEC enable and disable, let's
|
||||
split the function into two functions, one to enable and the other to
|
||||
disable.
|
||||
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-5-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 75 ++++++++++++++++++++--------------
|
||||
1 file changed, 45 insertions(+), 30 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -1739,7 +1739,7 @@ static irqreturn_t vc4_cec_irq_handler(i
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
|
||||
+static int vc4_hdmi_cec_enable(struct cec_adapter *adap)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
/* clock period in microseconds */
|
||||
@@ -1752,38 +1752,53 @@ static int vc4_hdmi_cec_adap_enable(stru
|
||||
val |= ((4700 / usecs) << VC4_HDMI_CEC_CNT_TO_4700_US_SHIFT) |
|
||||
((4500 / usecs) << VC4_HDMI_CEC_CNT_TO_4500_US_SHIFT);
|
||||
|
||||
- if (enable) {
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
|
||||
- VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_2,
|
||||
- ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
|
||||
- ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
|
||||
- ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
|
||||
- ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
|
||||
- ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_3,
|
||||
- ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
|
||||
- ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
|
||||
- ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
|
||||
- ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_4,
|
||||
- ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
|
||||
- ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
|
||||
- ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
|
||||
- ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
|
||||
-
|
||||
- if (!vc4_hdmi->variant->external_irq_controller)
|
||||
- HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
|
||||
- } else {
|
||||
- if (!vc4_hdmi->variant->external_irq_controller)
|
||||
- HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
|
||||
- HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
|
||||
- VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
- }
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_5, val |
|
||||
+ VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_5, val);
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_2,
|
||||
+ ((1500 / usecs) << VC4_HDMI_CEC_CNT_TO_1500_US_SHIFT) |
|
||||
+ ((1300 / usecs) << VC4_HDMI_CEC_CNT_TO_1300_US_SHIFT) |
|
||||
+ ((800 / usecs) << VC4_HDMI_CEC_CNT_TO_800_US_SHIFT) |
|
||||
+ ((600 / usecs) << VC4_HDMI_CEC_CNT_TO_600_US_SHIFT) |
|
||||
+ ((400 / usecs) << VC4_HDMI_CEC_CNT_TO_400_US_SHIFT));
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_3,
|
||||
+ ((2750 / usecs) << VC4_HDMI_CEC_CNT_TO_2750_US_SHIFT) |
|
||||
+ ((2400 / usecs) << VC4_HDMI_CEC_CNT_TO_2400_US_SHIFT) |
|
||||
+ ((2050 / usecs) << VC4_HDMI_CEC_CNT_TO_2050_US_SHIFT) |
|
||||
+ ((1700 / usecs) << VC4_HDMI_CEC_CNT_TO_1700_US_SHIFT));
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_4,
|
||||
+ ((4300 / usecs) << VC4_HDMI_CEC_CNT_TO_4300_US_SHIFT) |
|
||||
+ ((3900 / usecs) << VC4_HDMI_CEC_CNT_TO_3900_US_SHIFT) |
|
||||
+ ((3600 / usecs) << VC4_HDMI_CEC_CNT_TO_3600_US_SHIFT) |
|
||||
+ ((3500 / usecs) << VC4_HDMI_CEC_CNT_TO_3500_US_SHIFT));
|
||||
+
|
||||
+ if (!vc4_hdmi->variant->external_irq_controller)
|
||||
+ HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
+static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
|
||||
+{
|
||||
+ struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
+
|
||||
+ if (!vc4_hdmi->variant->external_irq_controller)
|
||||
+ HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
|
||||
+
|
||||
+ HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
|
||||
+ VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int vc4_hdmi_cec_adap_enable(struct cec_adapter *adap, bool enable)
|
||||
+{
|
||||
+ if (enable)
|
||||
+ return vc4_hdmi_cec_enable(adap);
|
||||
+ else
|
||||
+ return vc4_hdmi_cec_disable(adap);
|
||||
+}
|
||||
+
|
||||
static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
|
@ -0,0 +1,51 @@
|
|||
From 055b225c463ec348ab2701047016cc5957693320 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 15:59:30 +0200
|
||||
Subject: [PATCH 002/828] drm/vc4: hdmi: Make sure the device is powered with
|
||||
CEC
|
||||
|
||||
Similarly to what we encountered with the detect hook with DRM, nothing
|
||||
actually prevents any of the CEC callback from being run while the HDMI
|
||||
output is disabled.
|
||||
|
||||
However, this is an issue since any register access to the controller
|
||||
when it's powered down will result in a silent hang.
|
||||
|
||||
Let's make sure we run the runtime_pm hooks when the CEC adapter is
|
||||
opened and closed by the userspace to avoid that issue.
|
||||
|
||||
Fixes: 15b4511a4af6 ("drm/vc4: add HDMI CEC support")
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-6-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 10 +++++++++-
|
||||
1 file changed, 9 insertions(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -1744,8 +1744,14 @@ static int vc4_hdmi_cec_enable(struct ce
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
/* clock period in microseconds */
|
||||
const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
|
||||
- u32 val = HDMI_READ(HDMI_CEC_CNTRL_5);
|
||||
+ u32 val;
|
||||
+ int ret;
|
||||
|
||||
+ ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ val = HDMI_READ(HDMI_CEC_CNTRL_5);
|
||||
val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
|
||||
VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
|
||||
VC4_HDMI_CEC_CNT_TO_4500_US_MASK);
|
||||
@@ -1788,6 +1794,8 @@ static int vc4_hdmi_cec_disable(struct c
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
|
||||
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
|
||||
+ pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -0,0 +1,49 @@
|
|||
From 7a70a2083deb61123fcdec66388e72405eb39a78 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 15:59:31 +0200
|
||||
Subject: [PATCH 003/828] drm/vc4: hdmi: Warn if we access the controller while
|
||||
disabled
|
||||
|
||||
We've had many silent hangs where the kernel would look like it just
|
||||
stalled due to the access to one of the HDMI registers while the
|
||||
controller was disabled.
|
||||
|
||||
Add a warning if we're about to do that so that it's at least not silent
|
||||
anymore.
|
||||
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20210819135931.895976-7-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
||||
@@ -1,6 +1,8 @@
|
||||
#ifndef _VC4_HDMI_REGS_H_
|
||||
#define _VC4_HDMI_REGS_H_
|
||||
|
||||
+#include <linux/pm_runtime.h>
|
||||
+
|
||||
#include "vc4_hdmi.h"
|
||||
|
||||
#define VC4_HDMI_PACKET_STRIDE 0x24
|
||||
@@ -412,6 +414,8 @@ static inline u32 vc4_hdmi_read(struct v
|
||||
const struct vc4_hdmi_variant *variant = hdmi->variant;
|
||||
void __iomem *base;
|
||||
|
||||
+ WARN_ON(!pm_runtime_active(&hdmi->pdev->dev));
|
||||
+
|
||||
if (reg >= variant->num_registers) {
|
||||
dev_warn(&hdmi->pdev->dev,
|
||||
"Invalid register ID %u\n", reg);
|
||||
@@ -438,6 +442,8 @@ static inline void vc4_hdmi_write(struct
|
||||
const struct vc4_hdmi_variant *variant = hdmi->variant;
|
||||
void __iomem *base;
|
||||
|
||||
+ WARN_ON(!pm_runtime_active(&hdmi->pdev->dev));
|
||||
+
|
||||
if (reg >= variant->num_registers) {
|
||||
dev_warn(&hdmi->pdev->dev,
|
||||
"Invalid register ID %u\n", reg);
|
|
@ -0,0 +1,47 @@
|
|||
From c1f62cb809b2b5a34bc9cfbf86288f53845c3639 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 25 Oct 2021 17:28:54 +0200
|
||||
Subject: [PATCH 004/828] drm/vc4: hdmi: Remove the DDC probing for status
|
||||
detection
|
||||
|
||||
Commit 9d44abbbb8d5 ("drm/vc4: Fall back to using an EDID probe in the
|
||||
absence of a GPIO.") added some code to read the EDID through DDC in the
|
||||
HDMI driver detect hook since the Pi3 had no HPD GPIO back then.
|
||||
However, commit b1b8f45b3130 ("ARM: dts: bcm2837: Add missing GPIOs of
|
||||
Expander") changed that a couple of years later.
|
||||
|
||||
This causes an issue though since some TV (like the LG 55C8) when it
|
||||
comes out of standy will deassert the HPD line, but the EDID will
|
||||
remain readable.
|
||||
|
||||
It causes an issues nn platforms without an HPD GPIO, like the Pi4,
|
||||
where the DDC probing will be our primary mean to detect a display, and
|
||||
thus we will never detect the HPD pulse. This was fine before since the
|
||||
pulse was small enough that we would never detect it, and we also didn't
|
||||
have anything (like the scrambler) that needed to be set up in the
|
||||
display.
|
||||
|
||||
However, now that we have both, the display during the HPD pulse will
|
||||
clear its scrambler status, and since we won't detect the
|
||||
disconnect/reconnect cycle we will never enable the scrambler back.
|
||||
|
||||
As our main reason for that DDC probing is gone, let's just remove it.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Link: https://lore.kernel.org/r/20211025152903.1088803-2-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 2 --
|
||||
1 file changed, 2 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -175,8 +175,6 @@ vc4_hdmi_connector_detect(struct drm_con
|
||||
if (vc4_hdmi->hpd_gpio &&
|
||||
gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio)) {
|
||||
connected = true;
|
||||
- } else if (drm_probe_ddc(vc4_hdmi->ddc)) {
|
||||
- connected = true;
|
||||
} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
|
||||
connected = true;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
From 93e1f2ad3042e41c96031191f2bb6db2d0011e9c Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 25 Oct 2021 17:29:01 +0200
|
||||
Subject: [PATCH 005/828] drm/vc4: hdmi: Raise the maximum clock rate
|
||||
|
||||
Now that we have the infrastructure in place, we can raise the maximum
|
||||
pixel rate we can reach for HDMI0 on the BCM2711.
|
||||
|
||||
HDMI1 is left untouched since its pixelvalve has a smaller FIFO and
|
||||
would need a clock faster than what we can provide to support the same
|
||||
modes.
|
||||
|
||||
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://lore.kernel.org/r/20211025152903.1088803-9-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -2377,7 +2377,7 @@ static const struct vc4_hdmi_variant bcm
|
||||
.encoder_type = VC4_ENCODER_TYPE_HDMI0,
|
||||
.debugfs_name = "hdmi0_regs",
|
||||
.card_name = "vc4-hdmi-0",
|
||||
- .max_pixel_clock = HDMI_14_MAX_TMDS_CLK,
|
||||
+ .max_pixel_clock = 600000000,
|
||||
.registers = vc5_hdmi_hdmi0_fields,
|
||||
.num_registers = ARRAY_SIZE(vc5_hdmi_hdmi0_fields),
|
||||
.phy_lane_mapping = {
|
|
@ -0,0 +1,40 @@
|
|||
From 67b3c9ae6cea0f3bba4447b1c0748eead5551b09 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 25 Oct 2021 17:28:55 +0200
|
||||
Subject: [PATCH 006/828] drm/vc4: hdmi: Fix HPD GPIO detection
|
||||
|
||||
Prior to commit 6800234ceee0 ("drm/vc4: hdmi: Convert to gpiod"), in the
|
||||
detect hook, if we had an HPD GPIO we would only rely on it and return
|
||||
whatever state it was in.
|
||||
|
||||
However, that commit changed that by mistake to only consider the case
|
||||
where we have a GPIO and it returns a logical high, and would fall back
|
||||
to the other methods otherwise.
|
||||
|
||||
Since we can read the EDIDs when the HPD signal is low on some displays,
|
||||
we changed the detection status from disconnected to connected, and we
|
||||
would ignore an HPD pulse.
|
||||
|
||||
Fixes: 6800234ceee0 ("drm/vc4: hdmi: Convert to gpiod")
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Reviewed-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
|
||||
Link: https://lore.kernel.org/r/20211025152903.1088803-3-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -172,9 +172,9 @@ vc4_hdmi_connector_detect(struct drm_con
|
||||
|
||||
WARN_ON(pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev));
|
||||
|
||||
- if (vc4_hdmi->hpd_gpio &&
|
||||
- gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio)) {
|
||||
- connected = true;
|
||||
+ if (vc4_hdmi->hpd_gpio) {
|
||||
+ if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio))
|
||||
+ connected = true;
|
||||
} else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
|
||||
connected = true;
|
||||
}
|
|
@ -0,0 +1,907 @@
|
|||
From 2420cd113b423d855a00fd587599955970bb9993 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 25 Oct 2021 16:11:08 +0200
|
||||
Subject: [PATCH 007/828] drm/vc4: hdmi: Add a spinlock to protect register
|
||||
access
|
||||
|
||||
The vc4 HDMI driver has multiple path shared between the CEC, ALSA and
|
||||
KMS frameworks, plus two interrupt handlers (CEC and hotplug) that will
|
||||
read and modify a number of registers.
|
||||
|
||||
Even though not bug has been reported so far, it's definitely unsafe, so
|
||||
let's just add a spinlock to protect the register access of the HDMI
|
||||
controller.
|
||||
|
||||
Link: https://lore.kernel.org/r/20211025141113.702757-5-maxime@cerno.tech
|
||||
Fixes: c8b75bca92cb ("drm/vc4: Add KMS support for Raspberry Pi.")
|
||||
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 202 ++++++++++++++++++++++++++--
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.h | 5 +
|
||||
drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 37 +++++
|
||||
drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 2 +
|
||||
4 files changed, 236 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -118,6 +118,10 @@ static int vc4_hdmi_debugfs_regs(struct
|
||||
|
||||
static void vc4_hdmi_reset(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_M_CTL, VC4_HD_M_SW_RST);
|
||||
udelay(1);
|
||||
HDMI_WRITE(HDMI_M_CTL, 0);
|
||||
@@ -129,24 +133,36 @@ static void vc4_hdmi_reset(struct vc4_hd
|
||||
VC4_HDMI_SW_RESET_FORMAT_DETECT);
|
||||
|
||||
HDMI_WRITE(HDMI_SW_RESET_CONTROL, 0);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc5_hdmi_reset(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
reset_control_reset(vc4_hdmi->reset);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_DVP_CTL, 0);
|
||||
|
||||
HDMI_WRITE(HDMI_CLOCK_STOP,
|
||||
HDMI_READ(HDMI_CLOCK_STOP) | VC4_DVP_HT_CLOCK_STOP_PIXEL);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DRM_VC4_HDMI_CEC
|
||||
static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long cec_rate = clk_get_rate(vc4_hdmi->cec_clock);
|
||||
+ unsigned long flags;
|
||||
u16 clk_cnt;
|
||||
u32 value;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
value = HDMI_READ(HDMI_CEC_CNTRL_1);
|
||||
value &= ~VC4_HDMI_CEC_DIV_CLK_CNT_MASK;
|
||||
|
||||
@@ -154,9 +170,11 @@ static void vc4_hdmi_cec_update_clk_div(
|
||||
* Set the clock divider: the hsm_clock rate and this divider
|
||||
* setting will give a 40 kHz CEC clock.
|
||||
*/
|
||||
- clk_cnt = clk_get_rate(vc4_hdmi->cec_clock) / CEC_CLOCK_FREQ;
|
||||
+ clk_cnt = cec_rate / CEC_CLOCK_FREQ;
|
||||
value |= clk_cnt << VC4_HDMI_CEC_DIV_CLK_CNT_SHIFT;
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
#else
|
||||
static void vc4_hdmi_cec_update_clk_div(struct vc4_hdmi *vc4_hdmi) {}
|
||||
@@ -175,8 +193,16 @@ vc4_hdmi_connector_detect(struct drm_con
|
||||
if (vc4_hdmi->hpd_gpio) {
|
||||
if (gpiod_get_value_cansleep(vc4_hdmi->hpd_gpio))
|
||||
connected = true;
|
||||
- } else if (HDMI_READ(HDMI_HOTPLUG) & VC4_HDMI_HOTPLUG_CONNECTED) {
|
||||
- connected = true;
|
||||
+ } else {
|
||||
+ unsigned long flags;
|
||||
+ u32 hotplug;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+ hotplug = HDMI_READ(HDMI_HOTPLUG);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
+ if (hotplug & VC4_HDMI_HOTPLUG_CONNECTED)
|
||||
+ connected = true;
|
||||
}
|
||||
|
||||
if (connected) {
|
||||
@@ -370,9 +396,12 @@ static int vc4_hdmi_stop_packet(struct d
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
u32 packet_id = type - 0x80;
|
||||
+ unsigned long flags;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
|
||||
HDMI_READ(HDMI_RAM_PACKET_CONFIG) & ~BIT(packet_id));
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
if (!poll)
|
||||
return 0;
|
||||
@@ -392,6 +421,7 @@ static void vc4_hdmi_write_infoframe(str
|
||||
void __iomem *base = __vc4_hdmi_get_field_base(vc4_hdmi,
|
||||
ram_packet_start->reg);
|
||||
uint8_t buffer[VC4_HDMI_PACKET_STRIDE];
|
||||
+ unsigned long flags;
|
||||
ssize_t len, i;
|
||||
int ret;
|
||||
|
||||
@@ -409,6 +439,8 @@ static void vc4_hdmi_write_infoframe(str
|
||||
return;
|
||||
}
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
for (i = 0; i < len; i += 7) {
|
||||
writel(buffer[i + 0] << 0 |
|
||||
buffer[i + 1] << 8 |
|
||||
@@ -426,6 +458,9 @@ static void vc4_hdmi_write_infoframe(str
|
||||
|
||||
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
|
||||
HDMI_READ(HDMI_RAM_PACKET_CONFIG) | BIT(packet_id));
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
ret = wait_for((HDMI_READ(HDMI_RAM_PACKET_STATUS) &
|
||||
BIT(packet_id)), 100);
|
||||
if (ret)
|
||||
@@ -545,6 +580,7 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
{
|
||||
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ unsigned long flags;
|
||||
|
||||
if (!vc4_hdmi_supports_scrambling(encoder, mode))
|
||||
return;
|
||||
@@ -555,8 +591,10 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
|
||||
drm_scdc_set_scrambling(vc4_hdmi->ddc, true);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) |
|
||||
VC5_HDMI_SCRAMBLER_CTL_ENABLE);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
|
||||
msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
|
||||
@@ -566,6 +604,7 @@ static void vc4_hdmi_disable_scrambling(
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
+ unsigned long flags;
|
||||
|
||||
/*
|
||||
* At boot, encoder->crtc will be NULL. Since we don't know the
|
||||
@@ -581,8 +620,10 @@ static void vc4_hdmi_disable_scrambling(
|
||||
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
|
||||
cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_SCRAMBLER_CTL, HDMI_READ(HDMI_SCRAMBLER_CTL) &
|
||||
~VC5_HDMI_SCRAMBLER_CTL_ENABLE);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
drm_scdc_set_scrambling(vc4_hdmi->ddc, false);
|
||||
drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, false);
|
||||
@@ -608,15 +649,23 @@ static void vc4_hdmi_encoder_post_crtc_d
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0);
|
||||
|
||||
HDMI_WRITE(HDMI_VID_CTL, HDMI_READ(HDMI_VID_CTL) | VC4_HD_VID_CTL_CLRRGB);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
mdelay(1);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_VID_CTL,
|
||||
HDMI_READ(HDMI_VID_CTL) & ~VC4_HD_VID_CTL_ENABLE);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
vc4_hdmi_disable_scrambling(encoder);
|
||||
}
|
||||
|
||||
@@ -624,10 +673,13 @@ static void vc4_hdmi_encoder_post_crtc_p
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_VID_CTL,
|
||||
HDMI_READ(HDMI_VID_CTL) | VC4_HD_VID_CTL_BLANKPIX);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
if (vc4_hdmi->variant->phy_disable)
|
||||
vc4_hdmi->variant->phy_disable(vc4_hdmi);
|
||||
@@ -646,8 +698,11 @@ static void vc4_hdmi_encoder_disable(str
|
||||
|
||||
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
u32 csc_ctl;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
csc_ctl = VC4_SET_FIELD(VC4_HD_CSC_CTL_ORDER_BGR,
|
||||
VC4_HD_CSC_CTL_ORDER);
|
||||
|
||||
@@ -677,14 +732,19 @@ static void vc4_hdmi_csc_setup(struct vc
|
||||
|
||||
/* The RGB order applies even when CSC is disabled. */
|
||||
HDMI_WRITE(HDMI_CSC_CTL, csc_ctl);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc5_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
u32 csc_ctl;
|
||||
|
||||
csc_ctl = 0x07; /* RGB_CONVERT_MODE = custom matrix, || USE_RGB_TO_YCBCR */
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
if (enable) {
|
||||
/* CEA VICs other than #1 requre limited range RGB
|
||||
* output unless overridden by an AVI infoframe.
|
||||
@@ -716,6 +776,8 @@ static void vc5_hdmi_csc_setup(struct vc
|
||||
}
|
||||
|
||||
HDMI_WRITE(HDMI_CSC_CTL, csc_ctl);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
|
||||
@@ -739,6 +801,9 @@ static void vc4_hdmi_set_timings(struct
|
||||
mode->crtc_vsync_end -
|
||||
interlaced,
|
||||
VC4_HDMI_VERTB_VBP));
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_HORZA,
|
||||
(vsync_pos ? VC4_HDMI_HORZA_VPOS : 0) |
|
||||
@@ -762,6 +827,8 @@ static void vc4_hdmi_set_timings(struct
|
||||
|
||||
HDMI_WRITE(HDMI_VERTB0, vertb_even);
|
||||
HDMI_WRITE(HDMI_VERTB1, vertb);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc5_hdmi_set_timings(struct vc4_hdmi *vc4_hdmi,
|
||||
@@ -785,10 +852,13 @@ static void vc5_hdmi_set_timings(struct
|
||||
mode->crtc_vsync_end -
|
||||
interlaced,
|
||||
VC4_HDMI_VERTB_VBP));
|
||||
+ unsigned long flags;
|
||||
unsigned char gcp;
|
||||
bool gcp_en;
|
||||
u32 reg;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_VEC_INTERFACE_XBAR, 0x354021);
|
||||
HDMI_WRITE(HDMI_HORZA,
|
||||
(vsync_pos ? VC5_HDMI_HORZA_VPOS : 0) |
|
||||
@@ -847,13 +917,18 @@ static void vc5_hdmi_set_timings(struct
|
||||
HDMI_WRITE(HDMI_GCP_CONFIG, reg);
|
||||
|
||||
HDMI_WRITE(HDMI_CLOCK_STOP, 0);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_recenter_fifo(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
u32 drift;
|
||||
int ret;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
drift = HDMI_READ(HDMI_FIFO_CTL);
|
||||
drift &= VC4_HDMI_FIFO_VALID_WRITE_MASK;
|
||||
|
||||
@@ -861,12 +936,20 @@ static void vc4_hdmi_recenter_fifo(struc
|
||||
drift & ~VC4_HDMI_FIFO_CTL_RECENTER);
|
||||
HDMI_WRITE(HDMI_FIFO_CTL,
|
||||
drift | VC4_HDMI_FIFO_CTL_RECENTER);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
usleep_range(1000, 1100);
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_FIFO_CTL,
|
||||
drift & ~VC4_HDMI_FIFO_CTL_RECENTER);
|
||||
HDMI_WRITE(HDMI_FIFO_CTL,
|
||||
drift | VC4_HDMI_FIFO_CTL_RECENTER);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
ret = wait_for(HDMI_READ(HDMI_FIFO_CTL) &
|
||||
VC4_HDMI_FIFO_CTL_RECENTER_DONE, 1);
|
||||
WARN_ONCE(ret, "Timeout waiting for "
|
||||
@@ -900,6 +983,7 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
unsigned long pixel_rate = vc4_conn_state->pixel_rate;
|
||||
unsigned long bvb_rate, hsm_rate;
|
||||
+ unsigned long flags;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
@@ -968,11 +1052,15 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
if (vc4_hdmi->variant->phy_init)
|
||||
vc4_hdmi->variant->phy_init(vc4_hdmi, vc4_conn_state);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
|
||||
HDMI_READ(HDMI_SCHEDULER_CONTROL) |
|
||||
VC4_HDMI_SCHEDULER_CONTROL_MANUAL_FORMAT |
|
||||
VC4_HDMI_SCHEDULER_CONTROL_IGNORE_VSYNC_PREDICTS);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
if (vc4_hdmi->variant->set_timings)
|
||||
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
|
||||
|
||||
@@ -992,6 +1080,7 @@ static void vc4_hdmi_encoder_pre_crtc_en
|
||||
struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ unsigned long flags;
|
||||
|
||||
if (vc4_encoder->hdmi_monitor &&
|
||||
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
|
||||
@@ -1006,7 +1095,9 @@ static void vc4_hdmi_encoder_pre_crtc_en
|
||||
vc4_encoder->limited_rgb_range = false;
|
||||
}
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
|
||||
@@ -1017,8 +1108,11 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
|
||||
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
|
||||
+ unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_VID_CTL,
|
||||
VC4_HD_VID_CTL_ENABLE |
|
||||
VC4_HD_VID_CTL_CLRRGB |
|
||||
@@ -1035,6 +1129,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
HDMI_READ(HDMI_SCHEDULER_CONTROL) |
|
||||
VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
ret = wait_for(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
|
||||
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE, 1000);
|
||||
WARN_ONCE(ret, "Timeout waiting for "
|
||||
@@ -1047,6 +1143,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
HDMI_READ(HDMI_SCHEDULER_CONTROL) &
|
||||
~VC4_HDMI_SCHEDULER_CONTROL_MODE_HDMI);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
ret = wait_for(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
|
||||
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE), 1000);
|
||||
WARN_ONCE(ret, "Timeout waiting for "
|
||||
@@ -1054,6 +1152,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
}
|
||||
|
||||
if (vc4_encoder->hdmi_monitor) {
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
WARN_ON(!(HDMI_READ(HDMI_SCHEDULER_CONTROL) &
|
||||
VC4_HDMI_SCHEDULER_CONTROL_HDMI_ACTIVE));
|
||||
HDMI_WRITE(HDMI_SCHEDULER_CONTROL,
|
||||
@@ -1063,6 +1163,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG,
|
||||
VC4_HDMI_RAM_PACKET_ENABLE);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
vc4_hdmi_set_infoframes(encoder);
|
||||
}
|
||||
|
||||
@@ -1186,6 +1288,7 @@ static void vc4_hdmi_audio_set_mai_clock
|
||||
unsigned int samplerate)
|
||||
{
|
||||
u32 hsm_clock = clk_get_rate(vc4_hdmi->audio_clock);
|
||||
+ unsigned long flags;
|
||||
unsigned long n, m;
|
||||
|
||||
rational_best_approximation(hsm_clock, samplerate,
|
||||
@@ -1195,9 +1298,11 @@ static void vc4_hdmi_audio_set_mai_clock
|
||||
VC4_HD_MAI_SMP_M_SHIFT) + 1,
|
||||
&n, &m);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_MAI_SMP,
|
||||
VC4_SET_FIELD(n, VC4_HD_MAI_SMP_N) |
|
||||
VC4_SET_FIELD(m - 1, VC4_HD_MAI_SMP_M));
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
|
||||
@@ -1208,6 +1313,8 @@ static void vc4_hdmi_set_n_cts(struct vc
|
||||
u32 n, cts;
|
||||
u64 tmp;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
n = 128 * samplerate / 1000;
|
||||
tmp = (u64)(mode->clock * 1000) * n;
|
||||
do_div(tmp, 128 * samplerate);
|
||||
@@ -1237,6 +1344,7 @@ static int vc4_hdmi_audio_startup(struct
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
+ unsigned long flags;
|
||||
|
||||
/*
|
||||
* If the HDMI encoder hasn't probed, or the encoder is
|
||||
@@ -1248,12 +1356,14 @@ static int vc4_hdmi_audio_startup(struct
|
||||
|
||||
vc4_hdmi->audio.streaming = true;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_MAI_CTL,
|
||||
VC4_HD_MAI_CTL_RESET |
|
||||
VC4_HD_MAI_CTL_FLUSH |
|
||||
VC4_HD_MAI_CTL_DLATE |
|
||||
VC4_HD_MAI_CTL_ERRORE |
|
||||
VC4_HD_MAI_CTL_ERRORF);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
if (vc4_hdmi->variant->phy_rng_enable)
|
||||
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
|
||||
@@ -1265,6 +1375,7 @@ static void vc4_hdmi_audio_reset(struct
|
||||
{
|
||||
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
struct device *dev = &vc4_hdmi->pdev->dev;
|
||||
+ unsigned long flags;
|
||||
int ret;
|
||||
|
||||
vc4_hdmi->audio.streaming = false;
|
||||
@@ -1272,20 +1383,29 @@ static void vc4_hdmi_audio_reset(struct
|
||||
if (ret)
|
||||
dev_err(dev, "Failed to stop audio infoframe: %d\n", ret);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_MAI_CTL, VC4_HD_MAI_CTL_RESET);
|
||||
HDMI_WRITE(HDMI_MAI_CTL, VC4_HD_MAI_CTL_ERRORF);
|
||||
HDMI_WRITE(HDMI_MAI_CTL, VC4_HD_MAI_CTL_FLUSH);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_audio_shutdown(struct device *dev, void *data)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_MAI_CTL,
|
||||
VC4_HD_MAI_CTL_DLATE |
|
||||
VC4_HD_MAI_CTL_ERRORE |
|
||||
VC4_HD_MAI_CTL_ERRORF);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
if (vc4_hdmi->variant->phy_rng_disable)
|
||||
vc4_hdmi->variant->phy_rng_disable(vc4_hdmi);
|
||||
|
||||
@@ -1340,6 +1460,7 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
unsigned int sample_rate = params->sample_rate;
|
||||
unsigned int channels = params->channels;
|
||||
+ unsigned long flags;
|
||||
u32 audio_packet_config, channel_mask;
|
||||
u32 channel_map;
|
||||
u32 mai_audio_format;
|
||||
@@ -1348,14 +1469,15 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
|
||||
sample_rate, params->sample_width, channels);
|
||||
|
||||
+ vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_MAI_CTL,
|
||||
VC4_SET_FIELD(channels, VC4_HD_MAI_CTL_CHNUM) |
|
||||
VC4_HD_MAI_CTL_WHOLSMP |
|
||||
VC4_HD_MAI_CTL_CHALIGN |
|
||||
VC4_HD_MAI_CTL_ENABLE);
|
||||
|
||||
- vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
|
||||
-
|
||||
mai_sample_rate = sample_rate_to_mai_fmt(sample_rate);
|
||||
if (params->iec.status[0] & IEC958_AES0_NONAUDIO &&
|
||||
params->channels == 8)
|
||||
@@ -1393,8 +1515,11 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
channel_map = vc4_hdmi->variant->channel_map(vc4_hdmi, channel_mask);
|
||||
HDMI_WRITE(HDMI_MAI_CHANNEL_MAP, channel_map);
|
||||
HDMI_WRITE(HDMI_AUDIO_PACKET_CONFIG, audio_packet_config);
|
||||
+
|
||||
vc4_hdmi_set_n_cts(vc4_hdmi, sample_rate);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
memcpy(&vc4_hdmi->audio.infoframe, ¶ms->cea, sizeof(params->cea));
|
||||
vc4_hdmi_set_audio_infoframe(encoder);
|
||||
|
||||
@@ -1668,6 +1793,8 @@ static void vc4_cec_read_msg(struct vc4_
|
||||
struct cec_msg *msg = &vc4_hdmi->cec_rx_msg;
|
||||
unsigned int i;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
msg->len = 1 + ((cntrl1 & VC4_HDMI_CEC_REC_WRD_CNT_MASK) >>
|
||||
VC4_HDMI_CEC_REC_WRD_CNT_SHIFT);
|
||||
|
||||
@@ -1686,11 +1813,12 @@ static void vc4_cec_read_msg(struct vc4_
|
||||
}
|
||||
}
|
||||
|
||||
-static irqreturn_t vc4_cec_irq_handler_tx_bare(int irq, void *priv)
|
||||
+static irqreturn_t vc4_cec_irq_handler_tx_bare_locked(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
- struct vc4_hdmi *vc4_hdmi = priv;
|
||||
u32 cntrl1;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
|
||||
vc4_hdmi->cec_tx_ok = cntrl1 & VC4_HDMI_CEC_TX_STATUS_GOOD;
|
||||
cntrl1 &= ~VC4_HDMI_CEC_START_XMIT_BEGIN;
|
||||
@@ -1699,11 +1827,24 @@ static irqreturn_t vc4_cec_irq_handler_t
|
||||
return IRQ_WAKE_THREAD;
|
||||
}
|
||||
|
||||
-static irqreturn_t vc4_cec_irq_handler_rx_bare(int irq, void *priv)
|
||||
+static irqreturn_t vc4_cec_irq_handler_tx_bare(int irq, void *priv)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = priv;
|
||||
+ irqreturn_t ret;
|
||||
+
|
||||
+ spin_lock(&vc4_hdmi->hw_lock);
|
||||
+ ret = vc4_cec_irq_handler_tx_bare_locked(vc4_hdmi);
|
||||
+ spin_unlock(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
+static irqreturn_t vc4_cec_irq_handler_rx_bare_locked(struct vc4_hdmi *vc4_hdmi)
|
||||
+{
|
||||
u32 cntrl1;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
vc4_hdmi->cec_rx_msg.len = 0;
|
||||
cntrl1 = HDMI_READ(HDMI_CEC_CNTRL_1);
|
||||
vc4_cec_read_msg(vc4_hdmi, cntrl1);
|
||||
@@ -1716,6 +1857,18 @@ static irqreturn_t vc4_cec_irq_handler_r
|
||||
return IRQ_WAKE_THREAD;
|
||||
}
|
||||
|
||||
+static irqreturn_t vc4_cec_irq_handler_rx_bare(int irq, void *priv)
|
||||
+{
|
||||
+ struct vc4_hdmi *vc4_hdmi = priv;
|
||||
+ irqreturn_t ret;
|
||||
+
|
||||
+ spin_lock(&vc4_hdmi->hw_lock);
|
||||
+ ret = vc4_cec_irq_handler_rx_bare_locked(vc4_hdmi);
|
||||
+ spin_unlock(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
+ return ret;
|
||||
+}
|
||||
+
|
||||
static irqreturn_t vc4_cec_irq_handler(int irq, void *priv)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = priv;
|
||||
@@ -1726,14 +1879,17 @@ static irqreturn_t vc4_cec_irq_handler(i
|
||||
if (!(stat & VC4_HDMI_CPU_CEC))
|
||||
return IRQ_NONE;
|
||||
|
||||
+ spin_lock(&vc4_hdmi->hw_lock);
|
||||
cntrl5 = HDMI_READ(HDMI_CEC_CNTRL_5);
|
||||
vc4_hdmi->cec_irq_was_rx = cntrl5 & VC4_HDMI_CEC_RX_CEC_INT;
|
||||
if (vc4_hdmi->cec_irq_was_rx)
|
||||
- ret = vc4_cec_irq_handler_rx_bare(irq, priv);
|
||||
+ ret = vc4_cec_irq_handler_rx_bare_locked(vc4_hdmi);
|
||||
else
|
||||
- ret = vc4_cec_irq_handler_tx_bare(irq, priv);
|
||||
+ ret = vc4_cec_irq_handler_tx_bare_locked(vc4_hdmi);
|
||||
|
||||
HDMI_WRITE(HDMI_CEC_CPU_CLEAR, VC4_HDMI_CPU_CEC);
|
||||
+ spin_unlock(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1742,6 +1898,7 @@ static int vc4_hdmi_cec_enable(struct ce
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
/* clock period in microseconds */
|
||||
const u32 usecs = 1000000 / CEC_CLOCK_FREQ;
|
||||
+ unsigned long flags;
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
@@ -1749,6 +1906,8 @@ static int vc4_hdmi_cec_enable(struct ce
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
val = HDMI_READ(HDMI_CEC_CNTRL_5);
|
||||
val &= ~(VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET |
|
||||
VC4_HDMI_CEC_CNT_TO_4700_US_MASK |
|
||||
@@ -1779,12 +1938,17 @@ static int vc4_hdmi_cec_enable(struct ce
|
||||
if (!vc4_hdmi->variant->external_irq_controller)
|
||||
HDMI_WRITE(HDMI_CEC_CPU_MASK_CLEAR, VC4_HDMI_CPU_CEC);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vc4_hdmi_cec_disable(struct cec_adapter *adap)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
if (!vc4_hdmi->variant->external_irq_controller)
|
||||
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, VC4_HDMI_CPU_CEC);
|
||||
@@ -1792,6 +1956,8 @@ static int vc4_hdmi_cec_disable(struct c
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_5, HDMI_READ(HDMI_CEC_CNTRL_5) |
|
||||
VC4_HDMI_CEC_TX_SW_RESET | VC4_HDMI_CEC_RX_SW_RESET);
|
||||
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
|
||||
return 0;
|
||||
@@ -1808,10 +1974,14 @@ static int vc4_hdmi_cec_adap_enable(stru
|
||||
static int vc4_hdmi_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
+ unsigned long flags;
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_1,
|
||||
(HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) |
|
||||
(log_addr & 0xf) << VC4_HDMI_CEC_ADDR_SHIFT);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1820,6 +1990,7 @@ static int vc4_hdmi_cec_adap_transmit(st
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
struct drm_device *dev = vc4_hdmi->connector.dev;
|
||||
+ unsigned long flags;
|
||||
u32 val;
|
||||
unsigned int i;
|
||||
|
||||
@@ -1828,6 +1999,8 @@ static int vc4_hdmi_cec_adap_transmit(st
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
for (i = 0; i < msg->len; i += 4)
|
||||
HDMI_WRITE(HDMI_CEC_TX_DATA_1 + (i >> 2),
|
||||
(msg->msg[i]) |
|
||||
@@ -1843,6 +2016,9 @@ static int vc4_hdmi_cec_adap_transmit(st
|
||||
val |= VC4_HDMI_CEC_START_XMIT_BEGIN;
|
||||
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_1, val);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1857,6 +2033,7 @@ static int vc4_hdmi_cec_init(struct vc4_
|
||||
struct cec_connector_info conn_info;
|
||||
struct platform_device *pdev = vc4_hdmi->pdev;
|
||||
struct device *dev = &pdev->dev;
|
||||
+ unsigned long flags;
|
||||
u32 value;
|
||||
int ret;
|
||||
|
||||
@@ -1876,10 +2053,12 @@ static int vc4_hdmi_cec_init(struct vc4_
|
||||
cec_fill_conn_info_from_drm(&conn_info, &vc4_hdmi->connector);
|
||||
cec_s_conn_info(vc4_hdmi->cec_adap, &conn_info);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
value = HDMI_READ(HDMI_CEC_CNTRL_1);
|
||||
/* Set the logical address to Unregistered */
|
||||
value |= VC4_HDMI_CEC_ADDR_MASK;
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_1, value);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
vc4_hdmi_cec_update_clk_div(vc4_hdmi);
|
||||
|
||||
@@ -1898,7 +2077,9 @@ static int vc4_hdmi_cec_init(struct vc4_
|
||||
if (ret)
|
||||
goto err_remove_cec_rx_handler;
|
||||
} else {
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_CEC_CPU_MASK_SET, 0xffffffff);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
ret = request_threaded_irq(platform_get_irq(pdev, 0),
|
||||
vc4_cec_irq_handler,
|
||||
@@ -2168,6 +2349,7 @@ static int vc4_hdmi_bind(struct device *
|
||||
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
|
||||
if (!vc4_hdmi)
|
||||
return -ENOMEM;
|
||||
+ spin_lock_init(&vc4_hdmi->hw_lock);
|
||||
INIT_DELAYED_WORK(&vc4_hdmi->scrambling_work, vc4_hdmi_scrambling_wq);
|
||||
|
||||
dev_set_drvdata(dev, vc4_hdmi);
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
@@ -179,6 +179,11 @@ struct vc4_hdmi {
|
||||
|
||||
struct debugfs_regset32 hdmi_regset;
|
||||
struct debugfs_regset32 hd_regset;
|
||||
+
|
||||
+ /**
|
||||
+ * @hw_lock: Spinlock protecting device register access.
|
||||
+ */
|
||||
+ spinlock_t hw_lock;
|
||||
};
|
||||
|
||||
static inline struct vc4_hdmi *
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_phy.c
|
||||
@@ -130,31 +130,49 @@
|
||||
void vc4_hdmi_phy_init(struct vc4_hdmi *vc4_hdmi,
|
||||
struct vc4_hdmi_connector_state *conn_state)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
/* PHY should be in reset, like
|
||||
* vc4_hdmi_encoder_disable() does.
|
||||
*/
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
HDMI_WRITE(HDMI_TX_PHY_RESET_CTL, 0xf << 16);
|
||||
HDMI_WRITE(HDMI_TX_PHY_RESET_CTL, 0);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc4_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_TX_PHY_RESET_CTL, 0xf << 16);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc4_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_TX_PHY_CTL_0,
|
||||
HDMI_READ(HDMI_TX_PHY_CTL_0) &
|
||||
~VC4_HDMI_TX_PHY_RNG_PWRDN);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc4_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_TX_PHY_CTL_0,
|
||||
HDMI_READ(HDMI_TX_PHY_CTL_0) |
|
||||
VC4_HDMI_TX_PHY_RNG_PWRDN);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
static unsigned long long
|
||||
@@ -336,6 +354,8 @@ phy_get_channel_settings(enum vc4_hdmi_p
|
||||
|
||||
static void vc5_hdmi_reset_phy(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
+
|
||||
HDMI_WRITE(HDMI_TX_PHY_RESET_CTL, 0x0f);
|
||||
HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL, BIT(10));
|
||||
}
|
||||
@@ -348,10 +368,13 @@ void vc5_hdmi_phy_init(struct vc4_hdmi *
|
||||
unsigned long long pixel_freq = conn_state->pixel_rate;
|
||||
unsigned long long vco_freq;
|
||||
unsigned char word_sel;
|
||||
+ unsigned long flags;
|
||||
u8 vco_sel, vco_div;
|
||||
|
||||
vco_freq = phy_get_vco_freq(pixel_freq, &vco_sel, &vco_div);
|
||||
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
vc5_hdmi_reset_phy(vc4_hdmi);
|
||||
|
||||
HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL,
|
||||
@@ -501,23 +524,37 @@ void vc5_hdmi_phy_init(struct vc4_hdmi *
|
||||
HDMI_READ(HDMI_TX_PHY_RESET_CTL) |
|
||||
VC4_HDMI_TX_PHY_RESET_CTL_PLL_RESETB |
|
||||
VC4_HDMI_TX_PHY_RESET_CTL_PLLDIV_RESETB);
|
||||
+
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc5_hdmi_phy_disable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
vc5_hdmi_reset_phy(vc4_hdmi);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc5_hdmi_phy_rng_enable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL,
|
||||
HDMI_READ(HDMI_TX_PHY_POWERDOWN_CTL) &
|
||||
~VC4_HDMI_TX_PHY_POWERDOWN_CTL_RNDGEN_PWRDN);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
|
||||
void vc5_hdmi_phy_rng_disable(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
+ unsigned long flags;
|
||||
+
|
||||
+ spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_TX_PHY_POWERDOWN_CTL,
|
||||
HDMI_READ(HDMI_TX_PHY_POWERDOWN_CTL) |
|
||||
VC4_HDMI_TX_PHY_POWERDOWN_CTL_RNDGEN_PWRDN);
|
||||
+ spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
}
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi_regs.h
|
||||
@@ -442,6 +442,8 @@ static inline void vc4_hdmi_write(struct
|
||||
const struct vc4_hdmi_variant *variant = hdmi->variant;
|
||||
void __iomem *base;
|
||||
|
||||
+ lockdep_assert_held(&hdmi->hw_lock);
|
||||
+
|
||||
WARN_ON(!pm_runtime_active(&hdmi->pdev->dev));
|
||||
|
||||
if (reg >= variant->num_registers) {
|
|
@ -0,0 +1,444 @@
|
|||
From 0a307f1bd0ea3ee888d6fca239ae62a6fe2d39b2 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 25 Oct 2021 16:11:09 +0200
|
||||
Subject: [PATCH 008/828] drm/vc4: hdmi: Use a mutex to prevent concurrent
|
||||
framework access
|
||||
|
||||
The vc4 HDMI controller registers into the KMS, CEC and ALSA
|
||||
frameworks.
|
||||
|
||||
However, no particular care is done to prevent the concurrent execution
|
||||
of different framework hooks from happening at the same time.
|
||||
|
||||
In order to protect against that scenario, let's introduce a mutex that
|
||||
relevant ALSA and KMS hooks will need to take to prevent concurrent
|
||||
execution.
|
||||
|
||||
CEC is left out at the moment though, since the .get_modes and .detect
|
||||
KMS hooks, when running cec_s_phys_addr_from_edid, can end up calling
|
||||
CEC's .adap_enable hook. This introduces some reentrancy that isn't easy
|
||||
to deal with properly.
|
||||
|
||||
The CEC hooks also don't share much state with the rest of the driver:
|
||||
the registers are entirely separate, we don't share any variable, the
|
||||
only thing that can conflict is the CEC clock divider setup that can be
|
||||
affected by a mode set.
|
||||
|
||||
However, after discussing it, it looks like CEC should be able to
|
||||
recover from this if it was to happen.
|
||||
|
||||
Link: https://lore.kernel.org/r/20211025141113.702757-6-maxime@cerno.tech
|
||||
Fixes: bb7d78568814 ("drm/vc4: Add HDMI audio support")
|
||||
Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 118 +++++++++++++++++++++++++++++++--
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.h | 14 ++++
|
||||
2 files changed, 126 insertions(+), 6 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -188,6 +188,8 @@ vc4_hdmi_connector_detect(struct drm_con
|
||||
struct vc4_hdmi *vc4_hdmi = connector_to_vc4_hdmi(connector);
|
||||
bool connected = false;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
WARN_ON(pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev));
|
||||
|
||||
if (vc4_hdmi->hpd_gpio) {
|
||||
@@ -218,11 +220,13 @@ vc4_hdmi_connector_detect(struct drm_con
|
||||
|
||||
vc4_hdmi_enable_scrambling(&vc4_hdmi->encoder.base.base);
|
||||
pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
return connector_status_connected;
|
||||
}
|
||||
|
||||
cec_phys_addr_invalidate(vc4_hdmi->cec_adap);
|
||||
pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
return connector_status_disconnected;
|
||||
}
|
||||
|
||||
@@ -239,10 +243,14 @@ static int vc4_hdmi_connector_get_modes(
|
||||
int ret = 0;
|
||||
struct edid *edid;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
edid = drm_get_edid(connector, vc4_hdmi->ddc);
|
||||
cec_s_phys_addr_from_edid(vc4_hdmi->cec_adap, edid);
|
||||
- if (!edid)
|
||||
- return -ENODEV;
|
||||
+ if (!edid) {
|
||||
+ ret = -ENODEV;
|
||||
+ goto out;
|
||||
+ }
|
||||
|
||||
vc4_encoder->hdmi_monitor = drm_detect_hdmi_monitor(edid);
|
||||
|
||||
@@ -262,6 +270,9 @@ static int vc4_hdmi_connector_get_modes(
|
||||
}
|
||||
}
|
||||
|
||||
+out:
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -478,6 +489,8 @@ static void vc4_hdmi_set_avi_infoframe(s
|
||||
union hdmi_infoframe frame;
|
||||
int ret;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
ret = drm_hdmi_avi_infoframe_from_display_mode(&frame.avi,
|
||||
connector, mode);
|
||||
if (ret < 0) {
|
||||
@@ -529,6 +542,8 @@ static void vc4_hdmi_set_hdr_infoframe(s
|
||||
struct drm_connector_state *conn_state = connector->state;
|
||||
union hdmi_infoframe frame;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
if (!vc4_hdmi->variant->supports_hdr)
|
||||
return;
|
||||
|
||||
@@ -545,6 +560,8 @@ static void vc4_hdmi_set_infoframes(stru
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
vc4_hdmi_set_avi_infoframe(encoder);
|
||||
vc4_hdmi_set_spd_infoframe(encoder);
|
||||
/*
|
||||
@@ -564,6 +581,8 @@ static bool vc4_hdmi_supports_scrambling
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
struct drm_display_info *display = &vc4_hdmi->connector.display_info;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
if (!vc4_encoder->hdmi_monitor)
|
||||
return false;
|
||||
|
||||
@@ -582,6 +601,8 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
unsigned long flags;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
if (!vc4_hdmi_supports_scrambling(encoder, mode))
|
||||
return;
|
||||
|
||||
@@ -651,6 +672,8 @@ static void vc4_hdmi_encoder_post_crtc_d
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
unsigned long flags;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_RAM_PACKET_CONFIG, 0);
|
||||
@@ -667,6 +690,8 @@ static void vc4_hdmi_encoder_post_crtc_d
|
||||
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
vc4_hdmi_disable_scrambling(encoder);
|
||||
+
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_post_crtc_powerdown(struct drm_encoder *encoder,
|
||||
@@ -676,6 +701,8 @@ static void vc4_hdmi_encoder_post_crtc_p
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_VID_CTL,
|
||||
HDMI_READ(HDMI_VID_CTL) | VC4_HD_VID_CTL_BLANKPIX);
|
||||
@@ -690,6 +717,8 @@ static void vc4_hdmi_encoder_post_crtc_p
|
||||
ret = pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
if (ret < 0)
|
||||
DRM_ERROR("Failed to release power domain: %d\n", ret);
|
||||
+
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
|
||||
@@ -986,6 +1015,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
/*
|
||||
* As stated in RPi's vc4 firmware "HDMI state machine (HSM) clock must
|
||||
* be faster than pixel clock, infinitesimally faster, tested in
|
||||
@@ -1006,13 +1037,13 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
ret = clk_set_min_rate(vc4_hdmi->hsm_clock, hsm_rate);
|
||||
if (ret) {
|
||||
DRM_ERROR("Failed to set HSM clock rate: %d\n", ret);
|
||||
- return;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
|
||||
if (ret < 0) {
|
||||
DRM_ERROR("Failed to retain power domain: %d\n", ret);
|
||||
- return;
|
||||
+ goto out;
|
||||
}
|
||||
|
||||
ret = clk_set_rate(vc4_hdmi->pixel_clock, pixel_rate);
|
||||
@@ -1064,13 +1095,16 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
if (vc4_hdmi->variant->set_timings)
|
||||
vc4_hdmi->variant->set_timings(vc4_hdmi, conn_state, mode);
|
||||
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+
|
||||
return;
|
||||
|
||||
err_disable_pixel_clock:
|
||||
clk_disable_unprepare(vc4_hdmi->pixel_clock);
|
||||
err_put_runtime_pm:
|
||||
pm_runtime_put(&vc4_hdmi->pdev->dev);
|
||||
-
|
||||
+out:
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1082,6 +1116,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
unsigned long flags;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
if (vc4_encoder->hdmi_monitor &&
|
||||
drm_default_rgb_quant_range(mode) == HDMI_QUANTIZATION_RANGE_LIMITED) {
|
||||
if (vc4_hdmi->variant->csc_setup)
|
||||
@@ -1098,6 +1134,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_FIFO_CTL, VC4_HDMI_FIFO_CTL_MASTER_SLAVE_N);
|
||||
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
+
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
|
||||
@@ -1111,6 +1149,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_VID_CTL,
|
||||
@@ -1170,6 +1210,8 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
|
||||
vc4_hdmi_recenter_fifo(vc4_hdmi);
|
||||
vc4_hdmi_enable_scrambling(encoder);
|
||||
+
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
|
||||
@@ -1313,6 +1355,7 @@ static void vc4_hdmi_set_n_cts(struct vc
|
||||
u32 n, cts;
|
||||
u64 tmp;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
lockdep_assert_held(&vc4_hdmi->hw_lock);
|
||||
|
||||
n = 128 * samplerate / 1000;
|
||||
@@ -1346,13 +1389,17 @@ static int vc4_hdmi_audio_startup(struct
|
||||
struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
unsigned long flags;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
/*
|
||||
* If the HDMI encoder hasn't probed, or the encoder is
|
||||
* currently in DVI mode, treat the codec dai as missing.
|
||||
*/
|
||||
if (!encoder->crtc || !(HDMI_READ(HDMI_RAM_PACKET_CONFIG) &
|
||||
- VC4_HDMI_RAM_PACKET_ENABLE))
|
||||
+ VC4_HDMI_RAM_PACKET_ENABLE)) {
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
return -ENODEV;
|
||||
+ }
|
||||
|
||||
vc4_hdmi->audio.streaming = true;
|
||||
|
||||
@@ -1368,6 +1415,8 @@ static int vc4_hdmi_audio_startup(struct
|
||||
if (vc4_hdmi->variant->phy_rng_enable)
|
||||
vc4_hdmi->variant->phy_rng_enable(vc4_hdmi);
|
||||
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1378,6 +1427,8 @@ static void vc4_hdmi_audio_reset(struct
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
vc4_hdmi->audio.streaming = false;
|
||||
ret = vc4_hdmi_stop_packet(encoder, HDMI_INFOFRAME_TYPE_AUDIO, false);
|
||||
if (ret)
|
||||
@@ -1397,6 +1448,8 @@ static void vc4_hdmi_audio_shutdown(stru
|
||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||
unsigned long flags;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
HDMI_WRITE(HDMI_MAI_CTL,
|
||||
@@ -1411,6 +1464,8 @@ static void vc4_hdmi_audio_shutdown(stru
|
||||
|
||||
vc4_hdmi->audio.streaming = false;
|
||||
vc4_hdmi_audio_reset(vc4_hdmi);
|
||||
+
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static int sample_rate_to_mai_fmt(int samplerate)
|
||||
@@ -1469,6 +1524,8 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
dev_dbg(dev, "%s: %u Hz, %d bit, %d channels\n", __func__,
|
||||
sample_rate, params->sample_width, channels);
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+
|
||||
vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
|
||||
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
@@ -1523,6 +1580,8 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
memcpy(&vc4_hdmi->audio.infoframe, ¶ms->cea, sizeof(params->cea));
|
||||
vc4_hdmi_set_audio_infoframe(encoder);
|
||||
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1565,7 +1624,9 @@ static int vc4_hdmi_audio_get_eld(struct
|
||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||
struct drm_connector *connector = &vc4_hdmi->connector;
|
||||
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
memcpy(buf, connector->eld, min(sizeof(connector->eld), len));
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1902,6 +1963,17 @@ static int vc4_hdmi_cec_enable(struct ce
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
+ /*
|
||||
+ * NOTE: This function should really take vc4_hdmi->mutex, but doing so
|
||||
+ * results in a reentrancy since cec_s_phys_addr_from_edid() called in
|
||||
+ * .detect or .get_modes might call .adap_enable, which leads to this
|
||||
+ * function being called with that mutex held.
|
||||
+ *
|
||||
+ * Concurrency is not an issue for the moment since we don't share any
|
||||
+ * state with KMS, so we can ignore the lock for now, but we need to
|
||||
+ * keep it in mind if we were to change that assumption.
|
||||
+ */
|
||||
+
|
||||
ret = pm_runtime_resume_and_get(&vc4_hdmi->pdev->dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
@@ -1948,6 +2020,17 @@ static int vc4_hdmi_cec_disable(struct c
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
unsigned long flags;
|
||||
|
||||
+ /*
|
||||
+ * NOTE: This function should really take vc4_hdmi->mutex, but doing so
|
||||
+ * results in a reentrancy since cec_s_phys_addr_from_edid() called in
|
||||
+ * .detect or .get_modes might call .adap_enable, which leads to this
|
||||
+ * function being called with that mutex held.
|
||||
+ *
|
||||
+ * Concurrency is not an issue for the moment since we don't share any
|
||||
+ * state with KMS, so we can ignore the lock for now, but we need to
|
||||
+ * keep it in mind if we were to change that assumption.
|
||||
+ */
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
if (!vc4_hdmi->variant->external_irq_controller)
|
||||
@@ -1976,6 +2059,17 @@ static int vc4_hdmi_cec_adap_log_addr(st
|
||||
struct vc4_hdmi *vc4_hdmi = cec_get_drvdata(adap);
|
||||
unsigned long flags;
|
||||
|
||||
+ /*
|
||||
+ * NOTE: This function should really take vc4_hdmi->mutex, but doing so
|
||||
+ * results in a reentrancy since cec_s_phys_addr_from_edid() called in
|
||||
+ * .detect or .get_modes might call .adap_enable, which leads to this
|
||||
+ * function being called with that mutex held.
|
||||
+ *
|
||||
+ * Concurrency is not an issue for the moment since we don't share any
|
||||
+ * state with KMS, so we can ignore the lock for now, but we need to
|
||||
+ * keep it in mind if we were to change that assumption.
|
||||
+ */
|
||||
+
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
||||
HDMI_WRITE(HDMI_CEC_CNTRL_1,
|
||||
(HDMI_READ(HDMI_CEC_CNTRL_1) & ~VC4_HDMI_CEC_ADDR_MASK) |
|
||||
@@ -1994,6 +2088,17 @@ static int vc4_hdmi_cec_adap_transmit(st
|
||||
u32 val;
|
||||
unsigned int i;
|
||||
|
||||
+ /*
|
||||
+ * NOTE: This function should really take vc4_hdmi->mutex, but doing so
|
||||
+ * results in a reentrancy since cec_s_phys_addr_from_edid() called in
|
||||
+ * .detect or .get_modes might call .adap_enable, which leads to this
|
||||
+ * function being called with that mutex held.
|
||||
+ *
|
||||
+ * Concurrency is not an issue for the moment since we don't share any
|
||||
+ * state with KMS, so we can ignore the lock for now, but we need to
|
||||
+ * keep it in mind if we were to change that assumption.
|
||||
+ */
|
||||
+
|
||||
if (msg->len > 16) {
|
||||
drm_err(dev, "Attempting to transmit too much data (%d)\n", msg->len);
|
||||
return -ENOMEM;
|
||||
@@ -2349,6 +2454,7 @@ static int vc4_hdmi_bind(struct device *
|
||||
vc4_hdmi = devm_kzalloc(dev, sizeof(*vc4_hdmi), GFP_KERNEL);
|
||||
if (!vc4_hdmi)
|
||||
return -ENOMEM;
|
||||
+ mutex_init(&vc4_hdmi->mutex);
|
||||
spin_lock_init(&vc4_hdmi->hw_lock);
|
||||
INIT_DELAYED_WORK(&vc4_hdmi->scrambling_work, vc4_hdmi_scrambling_wq);
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
@@ -184,6 +184,20 @@ struct vc4_hdmi {
|
||||
* @hw_lock: Spinlock protecting device register access.
|
||||
*/
|
||||
spinlock_t hw_lock;
|
||||
+
|
||||
+ /**
|
||||
+ * @mutex: Mutex protecting the driver access across multiple
|
||||
+ * frameworks (KMS, ALSA).
|
||||
+ *
|
||||
+ * NOTE: While supported, CEC has been left out since
|
||||
+ * cec_s_phys_addr_from_edid() might call .adap_enable and lead to a
|
||||
+ * reentrancy issue between .get_modes (or .detect) and .adap_enable.
|
||||
+ * Since we don't share any state between the CEC hooks and KMS', it's
|
||||
+ * not a big deal. The only trouble might come from updating the CEC
|
||||
+ * clock divider which might be affected by a modeset, but CEC should
|
||||
+ * be resilient to that.
|
||||
+ */
|
||||
+ struct mutex mutex;
|
||||
};
|
||||
|
||||
static inline struct vc4_hdmi *
|
|
@ -0,0 +1,161 @@
|
|||
From 77a18429c6eb06a7bacf858f77b2778dee318df9 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Tue, 19 Oct 2021 14:19:29 +0200
|
||||
Subject: [PATCH 009/828] drm/vc4: hdmi: Prevent access to crtc->state outside
|
||||
of KMS
|
||||
|
||||
Accessing the crtc->state pointer from outside the modesetting context
|
||||
is not allowed. We thus need to copy whatever we need from the KMS state
|
||||
to our structure in order to access it.
|
||||
|
||||
However, in the vc4 HDMI driver we do use that pointer in the ALSA code
|
||||
path, and potentially in the hotplug interrupt handler path.
|
||||
|
||||
These paths both need access to the CRTC adjusted mode in order for the
|
||||
proper dividers to be set for ALSA, and the scrambler state to be
|
||||
reinstated properly for hotplug.
|
||||
|
||||
Let's copy this mode into our private encoder structure and reference it
|
||||
from there when needed. Since that part is shared between KMS and other
|
||||
paths, we need to protect it using our mutex.
|
||||
|
||||
Link: https://lore.kernel.org/all/YWgteNaNeaS9uWDe@phenom.ffwll.local/
|
||||
Fixes: bb7d78568814 ("drm/vc4: Add HDMI audio support")
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 38 +++++++++++++++++++++++-----------
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.h | 6 ++++++
|
||||
2 files changed, 32 insertions(+), 12 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -484,8 +484,7 @@ static void vc4_hdmi_set_avi_infoframe(s
|
||||
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
struct drm_connector *connector = &vc4_hdmi->connector;
|
||||
struct drm_connector_state *cstate = connector->state;
|
||||
- struct drm_crtc *crtc = encoder->crtc;
|
||||
- const struct drm_display_mode *mode = &crtc->state->adjusted_mode;
|
||||
+ const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
union hdmi_infoframe frame;
|
||||
int ret;
|
||||
|
||||
@@ -597,8 +596,8 @@ static bool vc4_hdmi_supports_scrambling
|
||||
|
||||
static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
|
||||
{
|
||||
- struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
unsigned long flags;
|
||||
|
||||
lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
@@ -624,18 +623,21 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
struct drm_crtc *crtc = encoder->crtc;
|
||||
unsigned long flags;
|
||||
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
/*
|
||||
* At boot, encoder->crtc will be NULL. Since we don't know the
|
||||
* state of the scrambler and in order to avoid any
|
||||
* inconsistency, let's disable it all the time.
|
||||
*/
|
||||
- if (crtc && !vc4_hdmi_supports_scrambling(encoder, &crtc->mode))
|
||||
+ if (crtc && !vc4_hdmi_supports_scrambling(encoder, mode))
|
||||
return;
|
||||
|
||||
- if (crtc && !vc4_hdmi_mode_needs_scrambling(&crtc->mode))
|
||||
+ if (crtc && !vc4_hdmi_mode_needs_scrambling(mode))
|
||||
return;
|
||||
|
||||
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
|
||||
@@ -1008,8 +1010,8 @@ static void vc4_hdmi_encoder_pre_crtc_co
|
||||
vc4_hdmi_encoder_get_connector_state(encoder, state);
|
||||
struct vc4_hdmi_connector_state *vc4_conn_state =
|
||||
conn_state_to_vc4_hdmi_conn_state(conn_state);
|
||||
- struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
unsigned long pixel_rate = vc4_conn_state->pixel_rate;
|
||||
unsigned long bvb_rate, hsm_rate;
|
||||
unsigned long flags;
|
||||
@@ -1111,9 +1113,9 @@ out:
|
||||
static void vc4_hdmi_encoder_pre_crtc_enable(struct drm_encoder *encoder,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
- struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
- struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
+ struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
unsigned long flags;
|
||||
|
||||
mutex_lock(&vc4_hdmi->mutex);
|
||||
@@ -1141,8 +1143,8 @@ static void vc4_hdmi_encoder_pre_crtc_en
|
||||
static void vc4_hdmi_encoder_post_crtc_enable(struct drm_encoder *encoder,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
- struct drm_display_mode *mode = &encoder->crtc->state->adjusted_mode;
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+ struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
struct vc4_hdmi_encoder *vc4_encoder = to_vc4_hdmi_encoder(encoder);
|
||||
bool hsync_pos = mode->flags & DRM_MODE_FLAG_PHSYNC;
|
||||
bool vsync_pos = mode->flags & DRM_MODE_FLAG_PVSYNC;
|
||||
@@ -1218,6 +1220,19 @@ static void vc4_hdmi_encoder_enable(stru
|
||||
{
|
||||
}
|
||||
|
||||
+static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
|
||||
+ struct drm_crtc_state *crtc_state,
|
||||
+ struct drm_connector_state *conn_state)
|
||||
+{
|
||||
+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+ memcpy(&vc4_hdmi->saved_adjusted_mode,
|
||||
+ &crtc_state->adjusted_mode,
|
||||
+ sizeof(vc4_hdmi->saved_adjusted_mode));
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+}
|
||||
+
|
||||
#define WIFI_2_4GHz_CH1_MIN_FREQ 2400000000ULL
|
||||
#define WIFI_2_4GHz_CH1_MAX_FREQ 2422000000ULL
|
||||
|
||||
@@ -1296,6 +1311,7 @@ vc4_hdmi_encoder_mode_valid(struct drm_e
|
||||
|
||||
static const struct drm_encoder_helper_funcs vc4_hdmi_encoder_helper_funcs = {
|
||||
.atomic_check = vc4_hdmi_encoder_atomic_check,
|
||||
+ .atomic_mode_set = vc4_hdmi_encoder_atomic_mode_set,
|
||||
.mode_valid = vc4_hdmi_encoder_mode_valid,
|
||||
.disable = vc4_hdmi_encoder_disable,
|
||||
.enable = vc4_hdmi_encoder_enable,
|
||||
@@ -1349,9 +1365,7 @@ static void vc4_hdmi_audio_set_mai_clock
|
||||
|
||||
static void vc4_hdmi_set_n_cts(struct vc4_hdmi *vc4_hdmi, unsigned int samplerate)
|
||||
{
|
||||
- struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
- struct drm_crtc *crtc = encoder->crtc;
|
||||
- const struct drm_display_mode *mode = &crtc->state->adjusted_mode;
|
||||
+ const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
u32 n, cts;
|
||||
u64 tmp;
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
@@ -198,6 +198,12 @@ struct vc4_hdmi {
|
||||
* be resilient to that.
|
||||
*/
|
||||
struct mutex mutex;
|
||||
+
|
||||
+ /**
|
||||
+ * @saved_adjusted_mode: Copy of @drm_crtc_state.adjusted_mode
|
||||
+ * for use by ALSA hooks and interrupt handlers. Protected by @mutex.
|
||||
+ */
|
||||
+ struct drm_display_mode saved_adjusted_mode;
|
||||
};
|
||||
|
||||
static inline struct vc4_hdmi *
|
|
@ -0,0 +1,77 @@
|
|||
From 4c60b81986b4e1dc80faa718a60dd9849dd4f4f7 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Fri, 24 Sep 2021 14:27:38 +0200
|
||||
Subject: [PATCH 010/828] drm/vc4: hdmi: Check the device state in prepare()
|
||||
|
||||
Even though we already check that the encoder->crtc pointer is there
|
||||
during in startup(), which is part of the open() path in ASoC, nothing
|
||||
guarantees that our encoder state won't change between the time when we
|
||||
open the device and the time we prepare it.
|
||||
|
||||
Move the sanity checks we do in startup() to a helper and call it from
|
||||
prepare().
|
||||
|
||||
Fixes: 91e99e113929 ("drm/vc4: hdmi: Register HDMI codec")
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 35 +++++++++++++++++++++++++++-------
|
||||
1 file changed, 28 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -1397,20 +1397,36 @@ static inline struct vc4_hdmi *dai_to_hd
|
||||
return snd_soc_card_get_drvdata(card);
|
||||
}
|
||||
|
||||
+static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi)
|
||||
+{
|
||||
+ struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
+
|
||||
+ lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
+
|
||||
+ /*
|
||||
+ * The encoder doesn't have a CRTC until the first modeset.
|
||||
+ */
|
||||
+ if (!encoder->crtc)
|
||||
+ return false;
|
||||
+
|
||||
+ /*
|
||||
+ * If the encoder is currently in DVI mode, treat the codec DAI
|
||||
+ * as missing.
|
||||
+ */
|
||||
+ if (!(HDMI_READ(HDMI_RAM_PACKET_CONFIG) & VC4_HDMI_RAM_PACKET_ENABLE))
|
||||
+ return false;
|
||||
+
|
||||
+ return true;
|
||||
+}
|
||||
+
|
||||
static int vc4_hdmi_audio_startup(struct device *dev, void *data)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = dev_get_drvdata(dev);
|
||||
- struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
unsigned long flags;
|
||||
|
||||
mutex_lock(&vc4_hdmi->mutex);
|
||||
|
||||
- /*
|
||||
- * If the HDMI encoder hasn't probed, or the encoder is
|
||||
- * currently in DVI mode, treat the codec dai as missing.
|
||||
- */
|
||||
- if (!encoder->crtc || !(HDMI_READ(HDMI_RAM_PACKET_CONFIG) &
|
||||
- VC4_HDMI_RAM_PACKET_ENABLE)) {
|
||||
+ if (!vc4_hdmi_audio_can_stream(vc4_hdmi)) {
|
||||
mutex_unlock(&vc4_hdmi->mutex);
|
||||
return -ENODEV;
|
||||
}
|
||||
@@ -1540,6 +1556,11 @@ static int vc4_hdmi_audio_prepare(struct
|
||||
|
||||
mutex_lock(&vc4_hdmi->mutex);
|
||||
|
||||
+ if (!vc4_hdmi_audio_can_stream(vc4_hdmi)) {
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
vc4_hdmi_audio_set_mai_clock(vc4_hdmi, sample_rate);
|
||||
|
||||
spin_lock_irqsave(&vc4_hdmi->hw_lock, flags);
|
|
@ -0,0 +1,78 @@
|
|||
From cbc84143c02c3a42609ba37283f0f1ea23643ecc Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Tue, 19 Oct 2021 17:31:58 +0200
|
||||
Subject: [PATCH 011/828] drm/vc4: hdmi: Introduce an output_enabled flag
|
||||
|
||||
We currently poke at encoder->crtc in the ALSA code path to determine
|
||||
whether the HDMI output is enabled or not, and thus whether we should
|
||||
allow the audio output.
|
||||
|
||||
However, that pointer is deprecated and shouldn't really be used by
|
||||
atomic drivers anymore. Since we have the infrastructure in place now,
|
||||
let's just create a flag that we toggle to report whether the controller
|
||||
is currently enabled and use that instead of encoder->crtc in ALSA.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 16 ++++++++++++----
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.h | 6 ++++++
|
||||
2 files changed, 18 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -725,6 +725,11 @@ static void vc4_hdmi_encoder_post_crtc_p
|
||||
|
||||
static void vc4_hdmi_encoder_disable(struct drm_encoder *encoder)
|
||||
{
|
||||
+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+ vc4_hdmi->output_enabled = false;
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_csc_setup(struct vc4_hdmi *vc4_hdmi, bool enable)
|
||||
@@ -1218,6 +1223,11 @@ static void vc4_hdmi_encoder_post_crtc_e
|
||||
|
||||
static void vc4_hdmi_encoder_enable(struct drm_encoder *encoder)
|
||||
{
|
||||
+ struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
+
|
||||
+ mutex_lock(&vc4_hdmi->mutex);
|
||||
+ vc4_hdmi->output_enabled = true;
|
||||
+ mutex_unlock(&vc4_hdmi->mutex);
|
||||
}
|
||||
|
||||
static void vc4_hdmi_encoder_atomic_mode_set(struct drm_encoder *encoder,
|
||||
@@ -1399,14 +1409,12 @@ static inline struct vc4_hdmi *dai_to_hd
|
||||
|
||||
static bool vc4_hdmi_audio_can_stream(struct vc4_hdmi *vc4_hdmi)
|
||||
{
|
||||
- struct drm_encoder *encoder = &vc4_hdmi->encoder.base.base;
|
||||
-
|
||||
lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
|
||||
/*
|
||||
- * The encoder doesn't have a CRTC until the first modeset.
|
||||
+ * If the controller is disabled, prevent any ALSA output.
|
||||
*/
|
||||
- if (!encoder->crtc)
|
||||
+ if (!vc4_hdmi->output_enabled)
|
||||
return false;
|
||||
|
||||
/*
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
@@ -204,6 +204,12 @@ struct vc4_hdmi {
|
||||
* for use by ALSA hooks and interrupt handlers. Protected by @mutex.
|
||||
*/
|
||||
struct drm_display_mode saved_adjusted_mode;
|
||||
+
|
||||
+ /**
|
||||
+ * @output_enabled: Is the HDMI controller currently active?
|
||||
+ * Protected by @mutex.
|
||||
+ */
|
||||
+ bool output_enabled;
|
||||
};
|
||||
|
||||
static inline struct vc4_hdmi *
|
|
@ -0,0 +1,101 @@
|
|||
From 092de8a130a33a1bd181cf0d40b9137af4be9dcf Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Tue, 19 Oct 2021 19:13:46 +0200
|
||||
Subject: [PATCH 012/828] drm/vc4: hdmi: Introduce a scdc_enabled flag
|
||||
|
||||
We currently rely on two functions, vc4_hdmi_supports_scrambling() and
|
||||
vc4_hdmi_mode_needs_scrambling() to determine if we should enable and
|
||||
disable the scrambler for any given mode.
|
||||
|
||||
Since we might need to disable the controller at boot, we also always
|
||||
run vc4_hdmi_disable_scrambling() and thus call those functions without
|
||||
a mode yet, which in turns need to make some special casing in order for
|
||||
it to work.
|
||||
|
||||
Instead of duplicating the check for whether or not we need to take care
|
||||
of the scrambler in both vc4_hdmi_enable_scrambling() and
|
||||
vc4_hdmi_disable_scrambling(), we can do that check only when we enable
|
||||
it and store whether or not it's been enabled in our private structure.
|
||||
|
||||
We also need to initialize that flag at true to make sure we disable the
|
||||
scrambler at boot since we can't really know its state yet.
|
||||
|
||||
This allows to simplify a bit that part of the driver, and removes one
|
||||
user of our copy of the CRTC adjusted mode outside of KMS (since
|
||||
vc4_hdmi_disable_scrambling() might be called from the hotplug interrupt
|
||||
handler).
|
||||
|
||||
It also removes our last user of the legacy encoder->crtc pointer.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 22 ++++++++++++----------
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.h | 6 ++++++
|
||||
2 files changed, 18 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -616,6 +616,8 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
VC5_HDMI_SCRAMBLER_CTL_ENABLE);
|
||||
spin_unlock_irqrestore(&vc4_hdmi->hw_lock, flags);
|
||||
|
||||
+ vc4_hdmi->scdc_enabled = true;
|
||||
+
|
||||
queue_delayed_work(system_wq, &vc4_hdmi->scrambling_work,
|
||||
msecs_to_jiffies(SCRAMBLING_POLLING_DELAY_MS));
|
||||
}
|
||||
@@ -623,22 +625,14 @@ static void vc4_hdmi_enable_scrambling(s
|
||||
static void vc4_hdmi_disable_scrambling(struct drm_encoder *encoder)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
|
||||
- struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
|
||||
- struct drm_crtc *crtc = encoder->crtc;
|
||||
unsigned long flags;
|
||||
|
||||
lockdep_assert_held(&vc4_hdmi->mutex);
|
||||
|
||||
- /*
|
||||
- * At boot, encoder->crtc will be NULL. Since we don't know the
|
||||
- * state of the scrambler and in order to avoid any
|
||||
- * inconsistency, let's disable it all the time.
|
||||
- */
|
||||
- if (crtc && !vc4_hdmi_supports_scrambling(encoder, mode))
|
||||
+ if (!vc4_hdmi->scdc_enabled)
|
||||
return;
|
||||
|
||||
- if (crtc && !vc4_hdmi_mode_needs_scrambling(mode))
|
||||
- return;
|
||||
+ vc4_hdmi->scdc_enabled = false;
|
||||
|
||||
if (delayed_work_pending(&vc4_hdmi->scrambling_work))
|
||||
cancel_delayed_work_sync(&vc4_hdmi->scrambling_work);
|
||||
@@ -2512,6 +2506,14 @@ static int vc4_hdmi_bind(struct device *
|
||||
vc4_hdmi->pdev = pdev;
|
||||
vc4_hdmi->variant = variant;
|
||||
|
||||
+ /*
|
||||
+ * Since we don't know the state of the controller and its
|
||||
+ * display (if any), let's assume it's always enabled.
|
||||
+ * vc4_hdmi_disable_scrambling() will thus run at boot, make
|
||||
+ * sure it's disabled, and avoid any inconsistency.
|
||||
+ */
|
||||
+ vc4_hdmi->scdc_enabled = true;
|
||||
+
|
||||
ret = variant->init_resources(vc4_hdmi);
|
||||
if (ret)
|
||||
return ret;
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
|
||||
@@ -210,6 +210,12 @@ struct vc4_hdmi {
|
||||
* Protected by @mutex.
|
||||
*/
|
||||
bool output_enabled;
|
||||
+
|
||||
+ /**
|
||||
+ * @scdc_enabled: Is the HDMI controller currently running with
|
||||
+ * the scrambler on? Protected by @mutex.
|
||||
+ */
|
||||
+ bool scdc_enabled;
|
||||
};
|
||||
|
||||
static inline struct vc4_hdmi *
|
|
@ -0,0 +1,45 @@
|
|||
From 7cfd43baeaf6f423ab7e4e291ae3b72f84f8fdbf Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Wed, 26 May 2021 16:07:01 +0200
|
||||
Subject: [PATCH 013/828] drm/vc4: Make vc4_crtc_get_encoder public
|
||||
|
||||
We'll need that function in vc4_kms to compute the core clock rate
|
||||
requirements.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 8 ++++----
|
||||
drivers/gpu/drm/vc4/vc4_drv.h | 5 +++++
|
||||
2 files changed, 9 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -281,10 +281,10 @@ static u32 vc4_crtc_get_fifo_full_level_
|
||||
* allows drivers to push pixels to more than one encoder from the
|
||||
* same CRTC.
|
||||
*/
|
||||
-static struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
|
||||
- struct drm_atomic_state *state,
|
||||
- struct drm_connector_state *(*get_state)(struct drm_atomic_state *state,
|
||||
- struct drm_connector *connector))
|
||||
+struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
|
||||
+ struct drm_atomic_state *state,
|
||||
+ struct drm_connector_state *(*get_state)(struct drm_atomic_state *state,
|
||||
+ struct drm_connector *connector))
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
@@ -544,6 +544,11 @@ vc4_crtc_to_vc4_pv_data(const struct vc4
|
||||
return container_of(data, struct vc4_pv_data, base);
|
||||
}
|
||||
|
||||
+struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
|
||||
+ struct drm_atomic_state *state,
|
||||
+ struct drm_connector_state *(*get_state)(struct drm_atomic_state *state,
|
||||
+ struct drm_connector *connector));
|
||||
+
|
||||
struct vc4_crtc_state {
|
||||
struct drm_crtc_state base;
|
||||
/* Dlist area for this CRTC configuration. */
|
|
@ -0,0 +1,43 @@
|
|||
From 63d006c505f695b14d71324f6217b7031531b242 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 14 Jun 2021 15:27:24 +0200
|
||||
Subject: [PATCH 014/828] drm/vc4: crtc: Add encoder to vc4_crtc_config_pv
|
||||
prototype
|
||||
|
||||
vc4_crtc_config_pv() retrieves the encoder again, even though its only
|
||||
caller, vc4_crtc_atomic_enable(), already did.
|
||||
|
||||
Pass the encoder pointer as an argument instead of going through all the
|
||||
connectors to retrieve it again.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 7 +++----
|
||||
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -315,12 +315,11 @@ static void vc4_crtc_pixelvalve_reset(st
|
||||
CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) | PV_CONTROL_FIFO_CLR);
|
||||
}
|
||||
|
||||
-static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_atomic_state *state)
|
||||
+static void vc4_crtc_config_pv(struct drm_crtc *crtc, struct drm_encoder *encoder,
|
||||
+ struct drm_atomic_state *state)
|
||||
{
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
- struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state,
|
||||
- drm_atomic_get_new_connector_state);
|
||||
struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
|
||||
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
|
||||
const struct vc4_pv_data *pv_data = vc4_crtc_to_vc4_pv_data(vc4_crtc);
|
||||
@@ -599,7 +598,7 @@ static void vc4_crtc_atomic_enable(struc
|
||||
if (vc4_encoder->pre_crtc_configure)
|
||||
vc4_encoder->pre_crtc_configure(encoder, state);
|
||||
|
||||
- vc4_crtc_config_pv(crtc, state);
|
||||
+ vc4_crtc_config_pv(crtc, encoder, state);
|
||||
|
||||
CRTC_WRITE(PV_CONTROL, CRTC_READ(PV_CONTROL) | PV_CONTROL_EN);
|
||||
|
|
@ -0,0 +1,96 @@
|
|||
From ef75a3ac2ee94f67f3d3d1d25f74200397b10d28 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 21 Jun 2021 16:07:22 +0200
|
||||
Subject: [PATCH 015/828] drm/vc4: crtc: Rework the encoder retrieval code
|
||||
(again)
|
||||
|
||||
It turns out the encoder retrieval code, in addition to being
|
||||
unnecessarily complicated, has a bug when only the planes and crtcs are
|
||||
affected by a given atomic commit.
|
||||
|
||||
Indeed, in such a case, either drm_atomic_get_old_connector_state or
|
||||
drm_atomic_get_new_connector_state will return NULL and thus our encoder
|
||||
retrieval code will not match on anything.
|
||||
|
||||
We can however simplify the code by using drm_for_each_encoder_mask, the
|
||||
drm_crtc_state storing the encoders a given CRTC is connected to
|
||||
directly and without relying on any other state.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 30 +++++++++---------------------
|
||||
drivers/gpu/drm/vc4/vc4_drv.h | 4 +---
|
||||
2 files changed, 10 insertions(+), 24 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -282,26 +282,14 @@ static u32 vc4_crtc_get_fifo_full_level_
|
||||
* same CRTC.
|
||||
*/
|
||||
struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
|
||||
- struct drm_atomic_state *state,
|
||||
- struct drm_connector_state *(*get_state)(struct drm_atomic_state *state,
|
||||
- struct drm_connector *connector))
|
||||
+ struct drm_crtc_state *state)
|
||||
{
|
||||
- struct drm_connector *connector;
|
||||
- struct drm_connector_list_iter conn_iter;
|
||||
+ struct drm_encoder *encoder;
|
||||
|
||||
- drm_connector_list_iter_begin(crtc->dev, &conn_iter);
|
||||
- drm_for_each_connector_iter(connector, &conn_iter) {
|
||||
- struct drm_connector_state *conn_state = get_state(state, connector);
|
||||
-
|
||||
- if (!conn_state)
|
||||
- continue;
|
||||
-
|
||||
- if (conn_state->crtc == crtc) {
|
||||
- drm_connector_list_iter_end(&conn_iter);
|
||||
- return connector->encoder;
|
||||
- }
|
||||
- }
|
||||
- drm_connector_list_iter_end(&conn_iter);
|
||||
+ WARN_ON(hweight32(state->encoder_mask) > 1);
|
||||
+
|
||||
+ drm_for_each_encoder_mask(encoder, crtc->dev, state->encoder_mask)
|
||||
+ return encoder;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
@@ -552,8 +540,7 @@ static void vc4_crtc_atomic_disable(stru
|
||||
struct drm_crtc_state *old_state = drm_atomic_get_old_crtc_state(state,
|
||||
crtc);
|
||||
struct vc4_crtc_state *old_vc4_state = to_vc4_crtc_state(old_state);
|
||||
- struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state,
|
||||
- drm_atomic_get_old_connector_state);
|
||||
+ struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, old_state);
|
||||
struct drm_device *dev = crtc->dev;
|
||||
|
||||
require_hvs_enabled(dev);
|
||||
@@ -580,10 +567,11 @@ static void vc4_crtc_atomic_disable(stru
|
||||
static void vc4_crtc_atomic_enable(struct drm_crtc *crtc,
|
||||
struct drm_atomic_state *state)
|
||||
{
|
||||
+ struct drm_crtc_state *new_state = drm_atomic_get_new_crtc_state(state,
|
||||
+ crtc);
|
||||
struct drm_device *dev = crtc->dev;
|
||||
struct vc4_crtc *vc4_crtc = to_vc4_crtc(crtc);
|
||||
- struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, state,
|
||||
- drm_atomic_get_new_connector_state);
|
||||
+ struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, new_state);
|
||||
struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
|
||||
|
||||
require_hvs_enabled(dev);
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
@@ -545,9 +545,7 @@ vc4_crtc_to_vc4_pv_data(const struct vc4
|
||||
}
|
||||
|
||||
struct drm_encoder *vc4_get_crtc_encoder(struct drm_crtc *crtc,
|
||||
- struct drm_atomic_state *state,
|
||||
- struct drm_connector_state *(*get_state)(struct drm_atomic_state *state,
|
||||
- struct drm_connector *connector));
|
||||
+ struct drm_crtc_state *state);
|
||||
|
||||
struct vc4_crtc_state {
|
||||
struct drm_crtc_state base;
|
|
@ -0,0 +1,38 @@
|
|||
From d31a74ccec8679458908ed08573a8558e04c209f Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 21 Jun 2021 16:13:02 +0200
|
||||
Subject: [PATCH 016/828] drm/vc4: crtc: Add some logging
|
||||
|
||||
The encoder retrieval code has been a source of bugs and glitches in the
|
||||
past and the crtc <-> encoder association been wrong in a number of
|
||||
different ways.
|
||||
|
||||
Add some logging to quickly spot issues if they occur.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -543,6 +543,9 @@ static void vc4_crtc_atomic_disable(stru
|
||||
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, old_state);
|
||||
struct drm_device *dev = crtc->dev;
|
||||
|
||||
+ drm_dbg(dev, "Disabling CRTC %s (%u) connected to Encoder %s (%u)",
|
||||
+ crtc->name, crtc->base.id, encoder->name, encoder->base.id);
|
||||
+
|
||||
require_hvs_enabled(dev);
|
||||
|
||||
/* Disable vblank irq handling before crtc is disabled. */
|
||||
@@ -574,6 +577,9 @@ static void vc4_crtc_atomic_enable(struc
|
||||
struct drm_encoder *encoder = vc4_get_crtc_encoder(crtc, new_state);
|
||||
struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
|
||||
|
||||
+ drm_dbg(dev, "Enabling CRTC %s (%u) connected to Encoder %s (%u)",
|
||||
+ crtc->name, crtc->base.id, encoder->name, encoder->base.id);
|
||||
+
|
||||
require_hvs_enabled(dev);
|
||||
|
||||
/* Enable vblank irq handling before crtc is started otherwise
|
|
@ -0,0 +1,123 @@
|
|||
From e03e29fe2bb7da723d52beedc56c9a6694ae5483 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Mon, 21 Jun 2021 17:19:22 +0200
|
||||
Subject: [PATCH 017/828] drm/vc4: Leverage the load tracker on the BCM2711
|
||||
|
||||
The load tracker was initially designed to report and warn about a load
|
||||
too high for the HVS. To do so, it computes for each plane the impact
|
||||
it's going to have on the HVS, and will warn (if it's enabled) if we go
|
||||
over what the hardware can process.
|
||||
|
||||
While the limits being used are a bit irrelevant to the BCM2711, the
|
||||
algorithm to compute the HVS load will be one component used in order to
|
||||
compute the core clock rate on the BCM2711.
|
||||
|
||||
Let's remove the hooks to prevent the load tracker to do its
|
||||
computation, but since we don't have the same limits, don't check them
|
||||
against them, and prevent the debugfs file to enable it from being
|
||||
created.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_debugfs.c | 7 +++++--
|
||||
drivers/gpu/drm/vc4/vc4_drv.h | 3 ---
|
||||
drivers/gpu/drm/vc4/vc4_kms.c | 16 +++++-----------
|
||||
drivers/gpu/drm/vc4/vc4_plane.c | 5 -----
|
||||
4 files changed, 10 insertions(+), 21 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_debugfs.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_debugfs.c
|
||||
@@ -7,6 +7,7 @@
|
||||
#include <linux/circ_buf.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/debugfs.h>
|
||||
+#include <linux/platform_device.h>
|
||||
|
||||
#include "vc4_drv.h"
|
||||
#include "vc4_regs.h"
|
||||
@@ -26,8 +27,10 @@ vc4_debugfs_init(struct drm_minor *minor
|
||||
struct vc4_dev *vc4 = to_vc4_dev(minor->dev);
|
||||
struct vc4_debugfs_info_entry *entry;
|
||||
|
||||
- debugfs_create_bool("hvs_load_tracker", S_IRUGO | S_IWUSR,
|
||||
- minor->debugfs_root, &vc4->load_tracker_enabled);
|
||||
+ if (!of_device_is_compatible(vc4->hvs->pdev->dev.of_node,
|
||||
+ "brcm,bcm2711-vc5"))
|
||||
+ debugfs_create_bool("hvs_load_tracker", S_IRUGO | S_IWUSR,
|
||||
+ minor->debugfs_root, &vc4->load_tracker_enabled);
|
||||
|
||||
list_for_each_entry(entry, &vc4->debugfs_list, link) {
|
||||
drm_debugfs_create_files(&entry->info, 1,
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
@@ -202,9 +202,6 @@ struct vc4_dev {
|
||||
|
||||
int power_refcount;
|
||||
|
||||
- /* Set to true when the load tracker is supported. */
|
||||
- bool load_tracker_available;
|
||||
-
|
||||
/* Set to true when the load tracker is active. */
|
||||
bool load_tracker_enabled;
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
@@ -554,9 +554,6 @@ static int vc4_load_tracker_atomic_check
|
||||
struct drm_plane *plane;
|
||||
int i;
|
||||
|
||||
- if (!vc4->load_tracker_available)
|
||||
- return 0;
|
||||
-
|
||||
priv_state = drm_atomic_get_private_obj_state(state,
|
||||
&vc4->load_tracker);
|
||||
if (IS_ERR(priv_state))
|
||||
@@ -631,9 +628,6 @@ static void vc4_load_tracker_obj_fini(st
|
||||
{
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
|
||||
- if (!vc4->load_tracker_available)
|
||||
- return;
|
||||
-
|
||||
drm_atomic_private_obj_fini(&vc4->load_tracker);
|
||||
}
|
||||
|
||||
@@ -641,9 +635,6 @@ static int vc4_load_tracker_obj_init(str
|
||||
{
|
||||
struct vc4_load_tracker_state *load_state;
|
||||
|
||||
- if (!vc4->load_tracker_available)
|
||||
- return 0;
|
||||
-
|
||||
load_state = kzalloc(sizeof(*load_state), GFP_KERNEL);
|
||||
if (!load_state)
|
||||
return -ENOMEM;
|
||||
@@ -865,9 +856,12 @@ int vc4_kms_load(struct drm_device *dev)
|
||||
"brcm,bcm2711-vc5");
|
||||
int ret;
|
||||
|
||||
+ /*
|
||||
+ * The limits enforced by the load tracker aren't relevant for
|
||||
+ * the BCM2711, but the load tracker computations are used for
|
||||
+ * the core clock rate calculation.
|
||||
+ */
|
||||
if (!is_vc5) {
|
||||
- vc4->load_tracker_available = true;
|
||||
-
|
||||
/* Start with the load tracker enabled. Can be
|
||||
* disabled through the debugfs load_tracker file.
|
||||
*/
|
||||
--- a/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
|
||||
@@ -529,11 +529,6 @@ static void vc4_plane_calc_load(struct d
|
||||
struct vc4_plane_state *vc4_state;
|
||||
struct drm_crtc_state *crtc_state;
|
||||
unsigned int vscale_factor;
|
||||
- struct vc4_dev *vc4;
|
||||
-
|
||||
- vc4 = to_vc4_dev(state->plane->dev);
|
||||
- if (!vc4->load_tracker_available)
|
||||
- return;
|
||||
|
||||
vc4_state = to_vc4_plane_state(state);
|
||||
crtc_state = drm_atomic_get_existing_crtc_state(state->state,
|
|
@ -0,0 +1,242 @@
|
|||
From 7c9fbfef03953f5e079d1c02897aaf3c514f12ad Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Wed, 26 May 2021 16:13:02 +0200
|
||||
Subject: [PATCH 018/828] drm/vc4: Increase the core clock based on HVS load
|
||||
|
||||
Depending on a given HVS output (HVS to PixelValves) and input (planes
|
||||
attached to a channel) load, the HVS needs for the core clock to be
|
||||
raised above its boot time default.
|
||||
|
||||
Failing to do so will result in a vblank timeout and a stalled display
|
||||
pipeline.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_crtc.c | 15 +++++
|
||||
drivers/gpu/drm/vc4/vc4_drv.h | 2 +
|
||||
drivers/gpu/drm/vc4/vc4_kms.c | 112 ++++++++++++++++++++++++++++++---
|
||||
3 files changed, 119 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
|
||||
@@ -661,12 +661,27 @@ static int vc4_crtc_atomic_check(struct
|
||||
struct vc4_crtc_state *vc4_state = to_vc4_crtc_state(crtc_state);
|
||||
struct drm_connector *conn;
|
||||
struct drm_connector_state *conn_state;
|
||||
+ struct drm_encoder *encoder;
|
||||
int ret, i;
|
||||
|
||||
ret = vc4_hvs_atomic_check(crtc, state);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ encoder = vc4_get_crtc_encoder(crtc, crtc_state);
|
||||
+ if (encoder) {
|
||||
+ const struct drm_display_mode *mode = &crtc_state->adjusted_mode;
|
||||
+ struct vc4_encoder *vc4_encoder = to_vc4_encoder(encoder);
|
||||
+
|
||||
+ mode = &crtc_state->adjusted_mode;
|
||||
+ if (vc4_encoder->type == VC4_ENCODER_TYPE_HDMI0) {
|
||||
+ vc4_state->hvs_load = max(mode->clock * mode->hdisplay / mode->htotal + 1000,
|
||||
+ mode->clock * 9 / 10) * 1000;
|
||||
+ } else {
|
||||
+ vc4_state->hvs_load = mode->clock * 1000;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
for_each_new_connector_in_state(state, conn, conn_state,
|
||||
i) {
|
||||
if (conn_state->crtc != crtc)
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
|
||||
@@ -558,6 +558,8 @@ struct vc4_crtc_state {
|
||||
unsigned int bottom;
|
||||
} margins;
|
||||
|
||||
+ unsigned long hvs_load;
|
||||
+
|
||||
/* Transitional state below, only valid during atomic commits */
|
||||
bool update_muxing;
|
||||
};
|
||||
--- a/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_kms.c
|
||||
@@ -39,9 +39,11 @@ static struct vc4_ctm_state *to_vc4_ctm_
|
||||
|
||||
struct vc4_hvs_state {
|
||||
struct drm_private_state base;
|
||||
+ unsigned long core_clock_rate;
|
||||
|
||||
struct {
|
||||
unsigned in_use: 1;
|
||||
+ unsigned long fifo_load;
|
||||
struct drm_crtc_commit *pending_commit;
|
||||
} fifo_state[HVS_NUM_CHANNELS];
|
||||
};
|
||||
@@ -339,11 +341,20 @@ static void vc4_atomic_commit_tail(struc
|
||||
struct vc4_dev *vc4 = to_vc4_dev(dev);
|
||||
struct vc4_hvs *hvs = vc4->hvs;
|
||||
struct drm_crtc_state *new_crtc_state;
|
||||
+ struct vc4_hvs_state *new_hvs_state;
|
||||
struct drm_crtc *crtc;
|
||||
struct vc4_hvs_state *old_hvs_state;
|
||||
unsigned int channel;
|
||||
int i;
|
||||
|
||||
+ old_hvs_state = vc4_hvs_get_old_global_state(state);
|
||||
+ if (WARN_ON(!old_hvs_state))
|
||||
+ return;
|
||||
+
|
||||
+ new_hvs_state = vc4_hvs_get_new_global_state(state);
|
||||
+ if (WARN_ON(!new_hvs_state))
|
||||
+ return;
|
||||
+
|
||||
for_each_new_crtc_in_state(state, crtc, new_crtc_state, i) {
|
||||
struct vc4_crtc_state *vc4_crtc_state;
|
||||
|
||||
@@ -354,10 +365,6 @@ static void vc4_atomic_commit_tail(struc
|
||||
vc4_hvs_mask_underrun(dev, vc4_crtc_state->assigned_channel);
|
||||
}
|
||||
|
||||
- old_hvs_state = vc4_hvs_get_old_global_state(state);
|
||||
- if (IS_ERR(old_hvs_state))
|
||||
- return;
|
||||
-
|
||||
for (channel = 0; channel < HVS_NUM_CHANNELS; channel++) {
|
||||
struct drm_crtc_commit *commit;
|
||||
int ret;
|
||||
@@ -377,8 +384,13 @@ static void vc4_atomic_commit_tail(struc
|
||||
old_hvs_state->fifo_state[channel].pending_commit = NULL;
|
||||
}
|
||||
|
||||
- if (vc4->hvs->hvs5)
|
||||
- clk_set_min_rate(hvs->core_clk, 500000000);
|
||||
+ if (vc4->hvs->hvs5) {
|
||||
+ unsigned long core_rate = max_t(unsigned long,
|
||||
+ 500000000,
|
||||
+ new_hvs_state->core_clock_rate);
|
||||
+
|
||||
+ clk_set_min_rate(hvs->core_clk, core_rate);
|
||||
+ }
|
||||
|
||||
drm_atomic_helper_commit_modeset_disables(dev, state);
|
||||
|
||||
@@ -401,8 +413,12 @@ static void vc4_atomic_commit_tail(struc
|
||||
|
||||
drm_atomic_helper_cleanup_planes(dev, state);
|
||||
|
||||
- if (vc4->hvs->hvs5)
|
||||
- clk_set_min_rate(hvs->core_clk, 0);
|
||||
+ if (vc4->hvs->hvs5) {
|
||||
+ drm_dbg(dev, "Running the core clock at %lu Hz\n",
|
||||
+ new_hvs_state->core_clock_rate);
|
||||
+
|
||||
+ clk_set_min_rate(hvs->core_clk, new_hvs_state->core_clock_rate);
|
||||
+ }
|
||||
}
|
||||
|
||||
static int vc4_atomic_commit_setup(struct drm_atomic_state *state)
|
||||
@@ -659,11 +675,13 @@ vc4_hvs_channels_duplicate_state(struct
|
||||
|
||||
__drm_atomic_helper_private_obj_duplicate_state(obj, &state->base);
|
||||
|
||||
-
|
||||
for (i = 0; i < HVS_NUM_CHANNELS; i++) {
|
||||
state->fifo_state[i].in_use = old_state->fifo_state[i].in_use;
|
||||
+ state->fifo_state[i].fifo_load = old_state->fifo_state[i].fifo_load;
|
||||
}
|
||||
|
||||
+ state->core_clock_rate = old_state->core_clock_rate;
|
||||
+
|
||||
return &state->base;
|
||||
}
|
||||
|
||||
@@ -819,6 +837,76 @@ static int vc4_pv_muxing_atomic_check(st
|
||||
}
|
||||
|
||||
static int
|
||||
+vc4_core_clock_atomic_check(struct drm_atomic_state *state)
|
||||
+{
|
||||
+ struct vc4_dev *vc4 = to_vc4_dev(state->dev);
|
||||
+ struct drm_private_state *priv_state;
|
||||
+ struct vc4_hvs_state *hvs_new_state;
|
||||
+ struct vc4_load_tracker_state *load_state;
|
||||
+ struct drm_crtc_state *old_crtc_state, *new_crtc_state;
|
||||
+ struct drm_crtc *crtc;
|
||||
+ unsigned int num_outputs;
|
||||
+ unsigned long pixel_rate;
|
||||
+ unsigned long cob_rate;
|
||||
+ unsigned int i;
|
||||
+
|
||||
+ priv_state = drm_atomic_get_private_obj_state(state,
|
||||
+ &vc4->load_tracker);
|
||||
+ if (IS_ERR(priv_state))
|
||||
+ return PTR_ERR(priv_state);
|
||||
+
|
||||
+ load_state = to_vc4_load_tracker_state(priv_state);
|
||||
+
|
||||
+ hvs_new_state = vc4_hvs_get_global_state(state);
|
||||
+ if (!hvs_new_state)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ for_each_oldnew_crtc_in_state(state, crtc,
|
||||
+ old_crtc_state,
|
||||
+ new_crtc_state,
|
||||
+ i) {
|
||||
+ if (old_crtc_state->active) {
|
||||
+ struct vc4_crtc_state *old_vc4_state =
|
||||
+ to_vc4_crtc_state(old_crtc_state);
|
||||
+ unsigned int channel = old_vc4_state->assigned_channel;
|
||||
+
|
||||
+ hvs_new_state->fifo_state[channel].fifo_load = 0;
|
||||
+ }
|
||||
+
|
||||
+ if (new_crtc_state->active) {
|
||||
+ struct vc4_crtc_state *new_vc4_state =
|
||||
+ to_vc4_crtc_state(new_crtc_state);
|
||||
+ unsigned int channel = new_vc4_state->assigned_channel;
|
||||
+
|
||||
+ hvs_new_state->fifo_state[channel].fifo_load =
|
||||
+ new_vc4_state->hvs_load;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ cob_rate = 0;
|
||||
+ num_outputs = 0;
|
||||
+ for (i = 0; i < HVS_NUM_CHANNELS; i++) {
|
||||
+ if (!hvs_new_state->fifo_state[i].in_use)
|
||||
+ continue;
|
||||
+
|
||||
+ num_outputs++;
|
||||
+ cob_rate += hvs_new_state->fifo_state[i].fifo_load;
|
||||
+ }
|
||||
+
|
||||
+ pixel_rate = load_state->hvs_load;
|
||||
+ if (num_outputs > 1) {
|
||||
+ pixel_rate = (pixel_rate * 40) / 100;
|
||||
+ } else {
|
||||
+ pixel_rate = (pixel_rate * 60) / 100;
|
||||
+ }
|
||||
+
|
||||
+ hvs_new_state->core_clock_rate = max(cob_rate, pixel_rate);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+
|
||||
+static int
|
||||
vc4_atomic_check(struct drm_device *dev, struct drm_atomic_state *state)
|
||||
{
|
||||
int ret;
|
||||
@@ -835,7 +923,11 @@ vc4_atomic_check(struct drm_device *dev,
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- return vc4_load_tracker_atomic_check(state);
|
||||
+ ret = vc4_load_tracker_atomic_check(state);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ return vc4_core_clock_atomic_check(state);
|
||||
}
|
||||
|
||||
static struct drm_mode_config_helper_funcs vc4_mode_config_helpers = {
|
|
@ -0,0 +1,24 @@
|
|||
From 958592c4da73d5f35f6cb1d7994d526718eeb2fa Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 15:53:03 +0200
|
||||
Subject: [PATCH 019/828] drm/vc4: select PM
|
||||
|
||||
We already depend on runtime PM to get the power domains and clocks for
|
||||
most of the devices supported by the vc4 driver, so let's just select it
|
||||
to make sure it's there, and remove the ifdef.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/Kconfig
|
||||
+++ b/drivers/gpu/drm/vc4/Kconfig
|
||||
@@ -9,6 +9,7 @@ config DRM_VC4
|
||||
select DRM_KMS_CMA_HELPER
|
||||
select DRM_GEM_CMA_HELPER
|
||||
select DRM_PANEL_BRIDGE
|
||||
+ select PM
|
||||
select SND_PCM
|
||||
select SND_PCM_ELD
|
||||
select SND_SOC_GENERIC_DMAENGINE_PCM
|
|
@ -1,7 +1,7 @@
|
|||
From 05bc2a114f7ee3caeb87377748bcf368d760b436 Mon Sep 17 00:00:00 2001
|
||||
From 435320b9d091bf1b42e65c2f36b16f9bebd0702d Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 14:37:04 +0200
|
||||
Subject: [PATCH 031/634] drm/probe-helper: Create a HPD IRQ event helper for a
|
||||
Subject: [PATCH 020/828] drm/probe-helper: Create a HPD IRQ event helper for a
|
||||
single connector
|
||||
|
||||
The drm_helper_hpd_irq_event() function is iterating over all the
|
||||
|
@ -23,25 +23,14 @@ Since both are suboptimal, let's create a helper that will only perform
|
|||
the status detection on a single connector.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
|
||||
---
|
||||
|
||||
Changes from v1:
|
||||
- Rename the shared function
|
||||
- Move the hotplug event notification out of the shared function
|
||||
- Added missing locks
|
||||
- Improve the documentation
|
||||
- Switched to drm_dbg_kms
|
||||
---
|
||||
drivers/gpu/drm/drm_probe_helper.c | 120 ++++++++++++++++++++---------
|
||||
include/drm/drm_probe_helper.h | 1 +
|
||||
2 files changed, 86 insertions(+), 35 deletions(-)
|
||||
|
||||
diff --git a/drivers/gpu/drm/drm_probe_helper.c b/drivers/gpu/drm/drm_probe_helper.c
|
||||
index 5606bca3caa8..fcf32ec0b0c8 100644
|
||||
--- a/drivers/gpu/drm/drm_probe_helper.c
|
||||
+++ b/drivers/gpu/drm/drm_probe_helper.c
|
||||
@@ -795,6 +795,86 @@ void drm_kms_helper_poll_fini(struct drm_device *dev)
|
||||
@@ -795,6 +795,86 @@ void drm_kms_helper_poll_fini(struct drm
|
||||
}
|
||||
EXPORT_SYMBOL(drm_kms_helper_poll_fini);
|
||||
|
||||
|
@ -142,7 +131,7 @@ index 5606bca3caa8..fcf32ec0b0c8 100644
|
|||
*
|
||||
* This function must be called from process context with no mode
|
||||
* setting locks held.
|
||||
@@ -822,9 +903,7 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev)
|
||||
@@ -822,9 +903,7 @@ bool drm_helper_hpd_irq_event(struct drm
|
||||
{
|
||||
struct drm_connector *connector;
|
||||
struct drm_connector_list_iter conn_iter;
|
||||
|
@ -152,7 +141,7 @@ index 5606bca3caa8..fcf32ec0b0c8 100644
|
|||
|
||||
if (!dev->mode_config.poll_enabled)
|
||||
return false;
|
||||
@@ -832,37 +911,8 @@ bool drm_helper_hpd_irq_event(struct drm_device *dev)
|
||||
@@ -832,37 +911,8 @@ bool drm_helper_hpd_irq_event(struct drm
|
||||
mutex_lock(&dev->mode_config.mutex);
|
||||
drm_connector_list_iter_begin(dev, &conn_iter);
|
||||
drm_for_each_connector_iter(connector, &conn_iter) {
|
||||
|
@ -191,11 +180,9 @@ index 5606bca3caa8..fcf32ec0b0c8 100644
|
|||
}
|
||||
drm_connector_list_iter_end(&conn_iter);
|
||||
mutex_unlock(&dev->mode_config.mutex);
|
||||
diff --git a/include/drm/drm_probe_helper.h b/include/drm/drm_probe_helper.h
|
||||
index 8d3ed2834d34..04c57564c397 100644
|
||||
--- a/include/drm/drm_probe_helper.h
|
||||
+++ b/include/drm/drm_probe_helper.h
|
||||
@@ -18,6 +18,7 @@ int drm_helper_probe_detect(struct drm_connector *connector,
|
||||
@@ -18,6 +18,7 @@ int drm_helper_probe_detect(struct drm_c
|
||||
void drm_kms_helper_poll_init(struct drm_device *dev);
|
||||
void drm_kms_helper_poll_fini(struct drm_device *dev);
|
||||
bool drm_helper_hpd_irq_event(struct drm_device *dev);
|
||||
|
@ -203,6 +190,3 @@ index 8d3ed2834d34..04c57564c397 100644
|
|||
void drm_kms_helper_hotplug_event(struct drm_device *dev);
|
||||
|
||||
void drm_kms_helper_poll_disable(struct drm_device *dev);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
From b286ea771fae840609b0d5eeb25ef0a4518a2a4f Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Thu, 19 Aug 2021 13:50:12 +0200
|
||||
Subject: [PATCH 021/828] drm/vc4: hdmi: Actually check for the connector
|
||||
status in hotplug
|
||||
|
||||
The drm_helper_hpd_irq_event() documentation states that this function
|
||||
is "useful for drivers which can't or don't track hotplug interrupts for
|
||||
each connector." and that "Drivers which support hotplug interrupts for
|
||||
each connector individually and which have a more fine-grained detect
|
||||
logic should bypass this code and directly call
|
||||
drm_kms_helper_hotplug_event()". This is thus what we ended-up doing.
|
||||
|
||||
However, what this actually means, and is further explained in the
|
||||
drm_kms_helper_hotplug_event() documentation, is that
|
||||
drm_kms_helper_hotplug_event() should be called by drivers that can
|
||||
track the connection status change, and if it has changed we should call
|
||||
that function.
|
||||
|
||||
This underlying expectation we failed to provide is that the caller of
|
||||
drm_kms_helper_hotplug_event() should call drm_helper_probe_detect() to
|
||||
probe the new status of the connector.
|
||||
|
||||
Since we didn't do it, it meant that even though we were sending the
|
||||
notification to user-space and the DRM clients that something changed we
|
||||
never probed or updated our internal connector status ourselves.
|
||||
|
||||
This went mostly unnoticed since the detect callback usually doesn't
|
||||
have any side-effect. Also, if we were using the DRM fbdev emulation
|
||||
(which is a DRM client), or any user-space application that can deal
|
||||
with hotplug events, chances are they would react to the hotplug event
|
||||
by probing the connector status eventually.
|
||||
|
||||
However, now that we have to enable the scrambler in detect() if it was
|
||||
enabled it has a side effect, and an application such as Kodi or
|
||||
modetest doesn't deal with hotplug events. This resulted with a black
|
||||
screen when Kodi or modetest was running when a screen was disconnected
|
||||
and then reconnected, or switched off and on.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_hdmi.c | 5 +++--
|
||||
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
|
||||
@@ -1792,10 +1792,11 @@ static void vc4_hdmi_audio_exit(struct v
|
||||
static irqreturn_t vc4_hdmi_hpd_irq_thread(int irq, void *priv)
|
||||
{
|
||||
struct vc4_hdmi *vc4_hdmi = priv;
|
||||
- struct drm_device *dev = vc4_hdmi->connector.dev;
|
||||
+ struct drm_connector *connector = &vc4_hdmi->connector;
|
||||
+ struct drm_device *dev = connector->dev;
|
||||
|
||||
if (dev && dev->registered)
|
||||
- drm_kms_helper_hotplug_event(dev);
|
||||
+ drm_connector_helper_hpd_irq_event(connector);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
|
@ -1,30 +1,27 @@
|
|||
From 718bb5e770c3de0831c94944f384d00385ae7eb7 Mon Sep 17 00:00:00 2001
|
||||
From a0073d49aea8a21658a00c24439ca95f42baf3ee Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Wed, 23 Jun 2021 11:53:46 +0200
|
||||
Subject: [PATCH 437/634] firmware: raspberrypi: Add
|
||||
Date: Wed, 15 Dec 2021 10:51:14 +0100
|
||||
Subject: [PATCH 022/828] firmware: raspberrypi: Add
|
||||
RPI_FIRMWARE_NOTIFY_DISPLAY_DONE
|
||||
|
||||
The RPI_FIRMWARE_NOTIFY_DISPLAY_DONE firmware call allows to tell the
|
||||
firmware the kernel is in charge of the display now and the firmware can
|
||||
free whatever resources it was using.
|
||||
|
||||
Acked-by: Nicolas Saenz Julienne <nsaenz@kernel.org>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-2-maxime@cerno.tech
|
||||
---
|
||||
include/soc/bcm2835/raspberrypi-firmware.h | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
index 0eca333ad2be..ee361b90eb29 100644
|
||||
--- a/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
@@ -95,6 +95,7 @@ enum rpi_firmware_property_tag {
|
||||
@@ -91,6 +91,7 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_GET_POE_HAT_VAL = 0x00030049,
|
||||
RPI_FIRMWARE_SET_POE_HAT_VAL = 0x00030050,
|
||||
RPI_FIRMWARE_NOTIFY_XHCI_RESET = 0x00030058,
|
||||
RPI_FIRMWARE_GET_REBOOT_FLAGS = 0x00030064,
|
||||
RPI_FIRMWARE_SET_REBOOT_FLAGS = 0x00038064,
|
||||
+ RPI_FIRMWARE_NOTIFY_DISPLAY_DONE = 0x00030066,
|
||||
|
||||
/* Dispmanx TAGS */
|
||||
RPI_FIRMWARE_FRAMEBUFFER_ALLOCATE = 0x00040001,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -0,0 +1,39 @@
|
|||
From 5644237465a4d0bf53a37db34ebae894e9fc9aaf Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Wed, 15 Dec 2021 10:51:16 +0100
|
||||
Subject: [PATCH 023/828] drm/vc4: Remove conflicting framebuffers before
|
||||
callind bind_all
|
||||
|
||||
The bind hooks will modify their controller registers, so simplefb is
|
||||
going to be unusable anyway. Let's avoid any transient state where it
|
||||
could still be in the system but no longer functionnal.
|
||||
|
||||
Acked-by: Nicolas Saenz Julienne <nsaenz@kernel.org>
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-4-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_drv.c | 8 ++++----
|
||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
|
||||
@@ -253,15 +253,15 @@ static int vc4_drm_bind(struct device *d
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- ret = component_bind_all(dev, drm);
|
||||
+ ret = drm_aperture_remove_framebuffers(false, &vc4_drm_driver);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
- ret = vc4_plane_create_additional_planes(drm);
|
||||
+ ret = component_bind_all(dev, drm);
|
||||
if (ret)
|
||||
- goto unbind_all;
|
||||
+ return ret;
|
||||
|
||||
- ret = drm_aperture_remove_framebuffers(false, &vc4_drm_driver);
|
||||
+ ret = vc4_plane_create_additional_planes(drm);
|
||||
if (ret)
|
||||
goto unbind_all;
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
From a52f674503e239ace32a2e831d42891682a86c89 Mon Sep 17 00:00:00 2001
|
||||
From: Maxime Ripard <maxime@cerno.tech>
|
||||
Date: Wed, 15 Dec 2021 10:51:17 +0100
|
||||
Subject: [PATCH 024/828] drm/vc4: Notify the firmware when DRM is in charge
|
||||
|
||||
Once the call to drm_fb_helper_remove_conflicting_framebuffers() has
|
||||
been made, simplefb has been unregistered and the KMS driver is entirely
|
||||
in charge of the display.
|
||||
|
||||
Thus, we can notify the firmware it can free whatever resource it was
|
||||
using to maintain simplefb functional.
|
||||
|
||||
Signed-off-by: Maxime Ripard <maxime@cerno.tech>
|
||||
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
|
||||
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
|
||||
Link: https://patchwork.freedesktop.org/patch/msgid/20211215095117.176435-5-maxime@cerno.tech
|
||||
---
|
||||
drivers/gpu/drm/vc4/vc4_drv.c | 22 ++++++++++++++++++++++
|
||||
1 file changed, 22 insertions(+)
|
||||
|
||||
--- a/drivers/gpu/drm/vc4/vc4_drv.c
|
||||
+++ b/drivers/gpu/drm/vc4/vc4_drv.c
|
||||
@@ -37,6 +37,8 @@
|
||||
#include <drm/drm_fb_helper.h>
|
||||
#include <drm/drm_vblank.h>
|
||||
|
||||
+#include <soc/bcm2835/raspberrypi-firmware.h>
|
||||
+
|
||||
#include "uapi/drm/vc4_drm.h"
|
||||
|
||||
#include "vc4_drv.h"
|
||||
@@ -217,6 +219,7 @@ static void vc4_match_add_drivers(struct
|
||||
static int vc4_drm_bind(struct device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
+ struct rpi_firmware *firmware = NULL;
|
||||
struct drm_device *drm;
|
||||
struct vc4_dev *vc4;
|
||||
struct device_node *node;
|
||||
@@ -253,10 +256,29 @@ static int vc4_drm_bind(struct device *d
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ node = of_find_compatible_node(NULL, NULL, "raspberrypi,bcm2835-firmware");
|
||||
+ if (node) {
|
||||
+ firmware = rpi_firmware_get(node);
|
||||
+ of_node_put(node);
|
||||
+
|
||||
+ if (!firmware)
|
||||
+ return -EPROBE_DEFER;
|
||||
+ }
|
||||
+
|
||||
ret = drm_aperture_remove_framebuffers(false, &vc4_drm_driver);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
+ if (firmware) {
|
||||
+ ret = rpi_firmware_property(firmware,
|
||||
+ RPI_FIRMWARE_NOTIFY_DISPLAY_DONE,
|
||||
+ NULL, 0);
|
||||
+ if (ret)
|
||||
+ drm_warn(drm, "Couldn't stop firmware display driver: %d\n", ret);
|
||||
+
|
||||
+ rpi_firmware_put(firmware);
|
||||
+ }
|
||||
+
|
||||
ret = component_bind_all(dev, drm);
|
||||
if (ret)
|
||||
return ret;
|
|
@ -1,7 +1,7 @@
|
|||
From 54c471a9b4588ba9bba0d9f3becb9ebcbf3f2c20 Mon Sep 17 00:00:00 2001
|
||||
From 47090ca3e20595483f323615502d929aaa83799f Mon Sep 17 00:00:00 2001
|
||||
From: Dan Pasanen <dan.pasanen@gmail.com>
|
||||
Date: Thu, 21 Sep 2017 09:55:42 -0500
|
||||
Subject: [PATCH 033/634] arm: partially revert
|
||||
Subject: [PATCH 025/828] arm: partially revert
|
||||
702b94bff3c50542a6e4ab9a4f4cef093262fe65
|
||||
|
||||
* Re-expose some dmi APIs for use in VCSM
|
||||
|
@ -12,8 +12,6 @@ Subject: [PATCH 033/634] arm: partially revert
|
|||
arch/arm/mm/proc-syms.c | 3 +++
|
||||
4 files changed, 28 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h
|
||||
index 5e56288e343b..d3672588ca84 100644
|
||||
--- a/arch/arm/include/asm/cacheflush.h
|
||||
+++ b/arch/arm/include/asm/cacheflush.h
|
||||
@@ -91,6 +91,21 @@
|
||||
|
@ -56,7 +54,7 @@ index 5e56288e343b..d3672588ca84 100644
|
|||
#define dmac_flush_range cpu_cache.dma_flush_range
|
||||
|
||||
#else
|
||||
@@ -156,6 +175,8 @@ extern void __cpuc_flush_dcache_area(void *, size_t);
|
||||
@@ -156,6 +175,8 @@ extern void __cpuc_flush_dcache_area(voi
|
||||
* is visible to DMA, or data written by DMA to system memory is
|
||||
* visible to the CPU.
|
||||
*/
|
||||
|
@ -65,11 +63,9 @@ index 5e56288e343b..d3672588ca84 100644
|
|||
extern void dmac_flush_range(const void *, const void *);
|
||||
|
||||
#endif
|
||||
diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h
|
||||
index 724f8dac1e5b..aa74173092dd 100644
|
||||
--- a/arch/arm/include/asm/glue-cache.h
|
||||
+++ b/arch/arm/include/asm/glue-cache.h
|
||||
@@ -155,6 +155,8 @@ static inline void nop_dma_unmap_area(const void *s, size_t l, int f) { }
|
||||
@@ -155,6 +155,8 @@ static inline void nop_dma_unmap_area(co
|
||||
#define __cpuc_coherent_user_range __glue(_CACHE,_coherent_user_range)
|
||||
#define __cpuc_flush_dcache_area __glue(_CACHE,_flush_kern_dcache_area)
|
||||
|
||||
|
@ -78,8 +74,6 @@ index 724f8dac1e5b..aa74173092dd 100644
|
|||
#define dmac_flush_range __glue(_CACHE,_dma_flush_range)
|
||||
#endif
|
||||
|
||||
diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S
|
||||
index d9f7dfe2a7ed..687d126d1c6c 100644
|
||||
--- a/arch/arm/mm/proc-macros.S
|
||||
+++ b/arch/arm/mm/proc-macros.S
|
||||
@@ -334,6 +334,8 @@ ENTRY(\name\()_cache_fns)
|
||||
|
@ -91,8 +85,6 @@ index d9f7dfe2a7ed..687d126d1c6c 100644
|
|||
.long \name\()_dma_flush_range
|
||||
.size \name\()_cache_fns, . - \name\()_cache_fns
|
||||
.endm
|
||||
diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c
|
||||
index e21249548e9f..33e4a9b8f1ba 100644
|
||||
--- a/arch/arm/mm/proc-syms.c
|
||||
+++ b/arch/arm/mm/proc-syms.c
|
||||
@@ -27,6 +27,9 @@ EXPORT_SYMBOL(__cpuc_flush_user_all);
|
||||
|
@ -105,6 +97,3 @@ index e21249548e9f..33e4a9b8f1ba 100644
|
|||
#else
|
||||
EXPORT_SYMBOL(cpu_cache);
|
||||
#endif
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 7e6b77b2bba73652ea10978bba06cde6c7af6046 Mon Sep 17 00:00:00 2001
|
||||
From fac88fd5d60183089cfc11a875acbd47d0b00242 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 29 Oct 2018 14:45:45 +0000
|
||||
Subject: [PATCH 034/634] Revert "rtc: pcf8523: properly handle oscillator stop
|
||||
Subject: [PATCH 026/828] Revert "rtc: pcf8523: properly handle oscillator stop
|
||||
bit"
|
||||
|
||||
This reverts commit ede44c908d44b166a5b6bd7caacd105c2ff5a70f.
|
||||
|
@ -13,11 +13,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/rtc/rtc-pcf8523.c | 24 ++++++++++++++++++++++--
|
||||
1 file changed, 22 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-pcf8523.c b/drivers/rtc/rtc-pcf8523.c
|
||||
index 8b6fb20774bf..ad2231f1faac 100644
|
||||
--- a/drivers/rtc/rtc-pcf8523.c
|
||||
+++ b/drivers/rtc/rtc-pcf8523.c
|
||||
@@ -242,8 +242,28 @@ static int pcf8523_rtc_read_time(struct device *dev, struct rtc_time *tm)
|
||||
@@ -242,8 +242,28 @@ static int pcf8523_rtc_read_time(struct
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
|
@ -48,6 +46,3 @@ index 8b6fb20774bf..ad2231f1faac 100644
|
|||
|
||||
tm->tm_sec = bcd2bin(regs[0] & 0x7f);
|
||||
tm->tm_min = bcd2bin(regs[1] & 0x7f);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,15 +1,13 @@
|
|||
From e1aca9751c1ca2bb868435f32d985dc5622fb36f Mon Sep 17 00:00:00 2001
|
||||
From 8c4a8300ab9e004755f5708e1ca621f846a5b338 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 15 Mar 2019 21:11:10 +0000
|
||||
Subject: [PATCH 035/634] Revert "staging: bcm2835-audio: Drop DT dependency"
|
||||
Subject: [PATCH 027/828] Revert "staging: bcm2835-audio: Drop DT dependency"
|
||||
|
||||
This reverts commit b7491a9fca2dc2535b9dc922550a37c5baae9d3d.
|
||||
---
|
||||
.../vc04_services/bcm2835-audio/bcm2835.c | 31 +++++++++++++------
|
||||
1 file changed, 22 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
|
||||
index c250fbef2fa3..b42917c25050 100644
|
||||
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
|
||||
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835.c
|
||||
@@ -6,13 +6,13 @@
|
||||
|
@ -27,7 +25,7 @@ index c250fbef2fa3..b42917c25050 100644
|
|||
|
||||
module_param(enable_hdmi, bool, 0444);
|
||||
MODULE_PARM_DESC(enable_hdmi, "Enables HDMI virtual audio device");
|
||||
@@ -21,8 +21,6 @@ MODULE_PARM_DESC(enable_headphones, "Enables Headphones virtual audio device");
|
||||
@@ -21,8 +21,6 @@ MODULE_PARM_DESC(enable_headphones, "Ena
|
||||
module_param(enable_compat_alsa, bool, 0444);
|
||||
MODULE_PARM_DESC(enable_compat_alsa,
|
||||
"Enables ALSA compatibility virtual audio device");
|
||||
|
@ -36,7 +34,7 @@ index c250fbef2fa3..b42917c25050 100644
|
|||
|
||||
static void bcm2835_devm_free_vchi_ctx(struct device *dev, void *res)
|
||||
{
|
||||
@@ -296,19 +294,28 @@ static int snd_add_child_devices(struct device *device, u32 numchans)
|
||||
@@ -296,19 +294,28 @@ static int snd_add_child_devices(struct
|
||||
static int snd_bcm2835_alsa_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
|
@ -70,7 +68,7 @@ index c250fbef2fa3..b42917c25050 100644
|
|||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -330,6 +337,12 @@ static int snd_bcm2835_alsa_resume(struct platform_device *pdev)
|
||||
@@ -330,6 +337,12 @@ static int snd_bcm2835_alsa_resume(struc
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -83,7 +81,7 @@ index c250fbef2fa3..b42917c25050 100644
|
|||
static struct platform_driver bcm2835_alsa_driver = {
|
||||
.probe = snd_bcm2835_alsa_probe,
|
||||
#ifdef CONFIG_PM
|
||||
@@ -338,6 +351,7 @@ static struct platform_driver bcm2835_alsa_driver = {
|
||||
@@ -338,6 +351,7 @@ static struct platform_driver bcm2835_al
|
||||
#endif
|
||||
.driver = {
|
||||
.name = "bcm2835_audio",
|
||||
|
@ -91,11 +89,8 @@ index c250fbef2fa3..b42917c25050 100644
|
|||
},
|
||||
};
|
||||
module_platform_driver(bcm2835_alsa_driver);
|
||||
@@ -345,4 +359,3 @@ module_platform_driver(bcm2835_alsa_driver);
|
||||
@@ -345,4 +359,3 @@ module_platform_driver(bcm2835_alsa_driv
|
||||
MODULE_AUTHOR("Dom Cobley");
|
||||
MODULE_DESCRIPTION("Alsa driver for BCM2835 chip");
|
||||
MODULE_LICENSE("GPL");
|
||||
-MODULE_ALIAS("platform:bcm2835_audio");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 1913228233ca712bcf4a1798a14dae8d73a7812d Mon Sep 17 00:00:00 2001
|
||||
From bf681447fed1077d7caa01cd5a1303d764876371 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Mon, 20 Apr 2020 13:41:10 +0100
|
||||
Subject: [PATCH 036/634] Revert "spi: spidev: Fix CS polarity if GPIO
|
||||
Subject: [PATCH 028/828] Revert "spi: spidev: Fix CS polarity if GPIO
|
||||
descriptors are used"
|
||||
|
||||
This reverts commit 83b2a8fe43bda0c11981ad6afa5dd0104d78be28.
|
||||
|
@ -9,11 +9,9 @@ This reverts commit 83b2a8fe43bda0c11981ad6afa5dd0104d78be28.
|
|||
drivers/spi/spidev.c | 5 -----
|
||||
1 file changed, 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
|
||||
index 1bd73e322b7b..795bef1efcc6 100644
|
||||
--- a/drivers/spi/spidev.c
|
||||
+++ b/drivers/spi/spidev.c
|
||||
@@ -402,7 +402,6 @@ spidev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
@@ -402,7 +402,6 @@ spidev_ioctl(struct file *filp, unsigned
|
||||
else
|
||||
retval = get_user(tmp, (u32 __user *)arg);
|
||||
if (retval == 0) {
|
||||
|
@ -21,7 +19,7 @@ index 1bd73e322b7b..795bef1efcc6 100644
|
|||
u32 save = spi->mode;
|
||||
|
||||
if (tmp & ~SPI_MODE_MASK) {
|
||||
@@ -410,10 +409,6 @@ spidev_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
|
||||
@@ -410,10 +409,6 @@ spidev_ioctl(struct file *filp, unsigned
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -32,6 +30,3 @@ index 1bd73e322b7b..795bef1efcc6 100644
|
|||
tmp |= spi->mode & ~SPI_MODE_MASK;
|
||||
spi->mode = (u16)tmp;
|
||||
retval = spi_setup(spi);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From d5fdbbc0de13fa9a40f02e1efb2a141bed7d7c26 Mon Sep 17 00:00:00 2001
|
||||
From 67426427b88650b1e4ad874dc73b5332f92aebfd Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Tue, 3 Nov 2020 11:49:53 +0000
|
||||
Subject: [PATCH 037/634] Revert "mailbox: avoid timer start from callback"
|
||||
Subject: [PATCH 029/828] Revert "mailbox: avoid timer start from callback"
|
||||
|
||||
This reverts commit c7dacf5b0f32957b24ef29df1207dc2cd8307743.
|
||||
|
||||
|
@ -25,11 +25,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
drivers/mailbox/mailbox.c | 12 +++++-------
|
||||
1 file changed, 5 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
|
||||
index 3e7d4b20ab34..0b821a5b2db8 100644
|
||||
--- a/drivers/mailbox/mailbox.c
|
||||
+++ b/drivers/mailbox/mailbox.c
|
||||
@@ -82,12 +82,9 @@ static void msg_submit(struct mbox_chan *chan)
|
||||
@@ -82,12 +82,9 @@ static void msg_submit(struct mbox_chan
|
||||
exit:
|
||||
spin_unlock_irqrestore(&chan->lock, flags);
|
||||
|
||||
|
@ -45,7 +43,7 @@ index 3e7d4b20ab34..0b821a5b2db8 100644
|
|||
}
|
||||
|
||||
static void tx_tick(struct mbox_chan *chan, int r)
|
||||
@@ -125,10 +122,11 @@ static enum hrtimer_restart txdone_hrtimer(struct hrtimer *hrtimer)
|
||||
@@ -125,10 +122,11 @@ static enum hrtimer_restart txdone_hrtim
|
||||
struct mbox_chan *chan = &mbox->chans[i];
|
||||
|
||||
if (chan->active_req && chan->cl) {
|
||||
|
@ -58,6 +56,3 @@ index 3e7d4b20ab34..0b821a5b2db8 100644
|
|||
}
|
||||
}
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From b16229ce33d1f597585e7a9adb2797698cd70d53 Mon Sep 17 00:00:00 2001
|
||||
From c8c89dff518af84e8850000441f6f2e0f40dfec6 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Mon, 1 Mar 2021 09:12:44 +0000
|
||||
Subject: [PATCH 038/634] Revert "Bluetooth: Always request for user
|
||||
Subject: [PATCH 030/828] Revert "Bluetooth: Always request for user
|
||||
confirmation for Just Works (LE SC)"
|
||||
|
||||
This reverts commit ffee202a78c2980688bc5d2f7d56480e69a5e0c9.
|
||||
|
@ -22,11 +22,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
net/bluetooth/smp.c | 5 +----
|
||||
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
|
||||
index 11f853d0500f..3efb60918dda 100644
|
||||
--- a/net/bluetooth/smp.c
|
||||
+++ b/net/bluetooth/smp.c
|
||||
@@ -2207,7 +2207,7 @@ static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
|
||||
@@ -2207,7 +2207,7 @@ mackey_and_ltk:
|
||||
if (err)
|
||||
return SMP_UNSPECIFIED;
|
||||
|
||||
|
@ -35,7 +33,7 @@ index 11f853d0500f..3efb60918dda 100644
|
|||
if (hcon->out) {
|
||||
sc_dhkey_check(smp);
|
||||
SMP_ALLOW_CMD(smp, SMP_CMD_DHKEY_CHECK);
|
||||
@@ -2222,9 +2222,6 @@ static u8 smp_cmd_pairing_random(struct l2cap_conn *conn, struct sk_buff *skb)
|
||||
@@ -2222,9 +2222,6 @@ mackey_and_ltk:
|
||||
confirm_hint = 0;
|
||||
|
||||
confirm:
|
||||
|
@ -45,6 +43,3 @@ index 11f853d0500f..3efb60918dda 100644
|
|||
err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst, hcon->type,
|
||||
hcon->dst_type, passkey, confirm_hint);
|
||||
if (err)
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 08df3cf28d296e75a24617b3f42e4074424d8723 Mon Sep 17 00:00:00 2001
|
||||
From b112518daffca7e8d95009da1eeaed967498d52b Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.com>
|
||||
Date: Mon, 1 Mar 2021 09:14:35 +0000
|
||||
Subject: [PATCH 039/634] Revert "Bluetooth: Always request for user
|
||||
Subject: [PATCH 031/828] Revert "Bluetooth: Always request for user
|
||||
confirmation for Just Works"
|
||||
|
||||
This reverts commit 92516cd97fd4d8ad5b1421a0d51771044f453a5f.
|
||||
|
@ -20,11 +20,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
net/bluetooth/smp.c | 11 ++---------
|
||||
1 file changed, 2 insertions(+), 9 deletions(-)
|
||||
|
||||
diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
|
||||
index 3efb60918dda..6f555b3c96a6 100644
|
||||
--- a/net/bluetooth/smp.c
|
||||
+++ b/net/bluetooth/smp.c
|
||||
@@ -883,16 +883,9 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
|
||||
@@ -883,16 +883,9 @@ static int tk_request(struct l2cap_conn
|
||||
hcon->io_capability == HCI_IO_NO_INPUT_OUTPUT)
|
||||
smp->method = JUST_WORKS;
|
||||
|
||||
|
@ -43,6 +41,3 @@ index 3efb60918dda..6f555b3c96a6 100644
|
|||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From cca91bca835263af74f73a048e15907037163f3e Mon Sep 17 00:00:00 2001
|
||||
From 96891c255392aadca5b5976544dc072886ee5cba Mon Sep 17 00:00:00 2001
|
||||
From: Steve Glendinning <steve.glendinning@smsc.com>
|
||||
Date: Thu, 19 Feb 2015 18:47:12 +0000
|
||||
Subject: [PATCH 040/634] smsx95xx: fix crimes against truesize
|
||||
Subject: [PATCH 032/828] smsx95xx: fix crimes against truesize
|
||||
|
||||
smsc95xx is adjusting truesize when it shouldn't, and following a recent patch from Eric this is now triggering warnings.
|
||||
|
||||
|
@ -12,8 +12,6 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
|
|||
drivers/net/usb/smsc95xx.c | 10 ++++++++--
|
||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
|
||||
index 26b1bd8e845b..befbabddb7f2 100644
|
||||
--- a/drivers/net/usb/smsc95xx.c
|
||||
+++ b/drivers/net/usb/smsc95xx.c
|
||||
@@ -67,6 +67,10 @@ static bool turbo_mode = true;
|
||||
|
@ -27,7 +25,7 @@ index 26b1bd8e845b..befbabddb7f2 100644
|
|||
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||
u32 *data, int in_pm)
|
||||
{
|
||||
@@ -1830,7 +1834,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
@@ -1839,7 +1843,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(skb);
|
||||
skb_trim(skb, skb->len - 4); /* remove fcs */
|
||||
|
@ -37,7 +35,7 @@ index 26b1bd8e845b..befbabddb7f2 100644
|
|||
|
||||
return 1;
|
||||
}
|
||||
@@ -1848,7 +1853,8 @@ static int smsc95xx_rx_fixup(struct usbnet *dev, struct sk_buff *skb)
|
||||
@@ -1857,7 +1862,8 @@ static int smsc95xx_rx_fixup(struct usbn
|
||||
if (dev->net->features & NETIF_F_RXCSUM)
|
||||
smsc95xx_rx_csum_offload(ax_skb);
|
||||
skb_trim(ax_skb, ax_skb->len - 4); /* remove fcs */
|
||||
|
@ -47,6 +45,3 @@ index 26b1bd8e845b..befbabddb7f2 100644
|
|||
|
||||
usbnet_skb_return(dev, ax_skb);
|
||||
}
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 533c49dd675017d8027f555106df6c135a787c48 Mon Sep 17 00:00:00 2001
|
||||
From 368f02a84a036c5efd224ad62415bb58e085650c Mon Sep 17 00:00:00 2001
|
||||
From: Sam Nazarko <email@samnazarko.co.uk>
|
||||
Date: Fri, 1 Apr 2016 17:27:21 +0100
|
||||
Subject: [PATCH 041/634] smsc95xx: Experimental: Enable turbo_mode and
|
||||
Subject: [PATCH 033/828] smsc95xx: Experimental: Enable turbo_mode and
|
||||
packetsize=2560 by default
|
||||
|
||||
See: http://forum.kodi.tv/showthread.php?tid=285288
|
||||
|
@ -9,8 +9,6 @@ See: http://forum.kodi.tv/showthread.php?tid=285288
|
|||
drivers/net/usb/smsc95xx.c | 14 +++++++++-----
|
||||
1 file changed, 9 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
|
||||
index befbabddb7f2..a7bb0bfa51a7 100644
|
||||
--- a/drivers/net/usb/smsc95xx.c
|
||||
+++ b/drivers/net/usb/smsc95xx.c
|
||||
@@ -71,6 +71,10 @@ static bool truesize_mode = false;
|
||||
|
@ -24,7 +22,7 @@ index befbabddb7f2..a7bb0bfa51a7 100644
|
|||
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||
u32 *data, int in_pm)
|
||||
{
|
||||
@@ -905,13 +909,13 @@ static int smsc95xx_reset(struct usbnet *dev)
|
||||
@@ -917,13 +921,13 @@ static int smsc95xx_reset(struct usbnet
|
||||
|
||||
if (!turbo_mode) {
|
||||
burst_cap = 0;
|
||||
|
@ -43,6 +41,3 @@ index befbabddb7f2..a7bb0bfa51a7 100644
|
|||
}
|
||||
|
||||
netif_dbg(dev, ifup, dev->net, "rx_urb_size=%ld\n",
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,15 +1,13 @@
|
|||
From de98c2df30df39fc7ea36af74fbe791b2be5c867 Mon Sep 17 00:00:00 2001
|
||||
From f4415fe11a71b6f549477d28060d1585d9585bf6 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 26 Mar 2013 17:26:38 +0000
|
||||
Subject: [PATCH 042/634] Allow mac address to be set in smsc95xx
|
||||
Subject: [PATCH 034/828] Allow mac address to be set in smsc95xx
|
||||
|
||||
Signed-off-by: popcornmix <popcornmix@gmail.com>
|
||||
---
|
||||
drivers/net/usb/smsc95xx.c | 56 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 56 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c
|
||||
index a7bb0bfa51a7..8a035345d617 100644
|
||||
--- a/drivers/net/usb/smsc95xx.c
|
||||
+++ b/drivers/net/usb/smsc95xx.c
|
||||
@@ -50,6 +50,7 @@
|
||||
|
@ -31,7 +29,7 @@ index a7bb0bfa51a7..8a035345d617 100644
|
|||
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
|
||||
u32 *data, int in_pm)
|
||||
{
|
||||
@@ -761,6 +766,53 @@ static int smsc95xx_ioctl(struct net_device *netdev, struct ifreq *rq, int cmd)
|
||||
@@ -773,6 +778,53 @@ static int smsc95xx_ioctl(struct net_dev
|
||||
return phy_mii_ioctl(netdev->phydev, rq, cmd);
|
||||
}
|
||||
|
||||
|
@ -85,7 +83,7 @@ index a7bb0bfa51a7..8a035345d617 100644
|
|||
static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||
{
|
||||
/* maybe the boot loader passed the MAC address in devicetree */
|
||||
@@ -783,6 +835,10 @@ static void smsc95xx_init_mac_address(struct usbnet *dev)
|
||||
@@ -795,6 +847,10 @@ static void smsc95xx_init_mac_address(st
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -96,6 +94,3 @@ index a7bb0bfa51a7..8a035345d617 100644
|
|||
/* no useful static MAC address found. generate a random one */
|
||||
eth_hw_addr_random(dev->net);
|
||||
netif_dbg(dev, ifup, dev->net, "MAC address set to eth_random_addr\n");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 40a04a8163ad602e595998d97cd3278e85e7b398 Mon Sep 17 00:00:00 2001
|
||||
From f61ab6249b4da040e2a1d1e621bfe6acb3b70782 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 27 Nov 2017 17:14:54 +0000
|
||||
Subject: [PATCH 043/634] cgroup: Disable cgroup "memory" by default
|
||||
Subject: [PATCH 035/828] cgroup: Disable cgroup "memory" by default
|
||||
|
||||
Some Raspberry Pis have limited RAM and most users won't use the
|
||||
cgroup memory support so it is disabled by default. Enable with:
|
||||
|
@ -15,11 +15,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
kernel/cgroup/cgroup.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 38 insertions(+)
|
||||
|
||||
diff --git a/kernel/cgroup/cgroup.c b/kernel/cgroup/cgroup.c
|
||||
index d6ea872b23aa..db12e07ce531 100644
|
||||
--- a/kernel/cgroup/cgroup.c
|
||||
+++ b/kernel/cgroup/cgroup.c
|
||||
@@ -5788,6 +5788,9 @@ int __init cgroup_init_early(void)
|
||||
@@ -5824,6 +5824,9 @@ int __init cgroup_init_early(void)
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -29,7 +27,7 @@ index d6ea872b23aa..db12e07ce531 100644
|
|||
/**
|
||||
* cgroup_init - cgroup initialization
|
||||
*
|
||||
@@ -5826,6 +5829,12 @@ int __init cgroup_init(void)
|
||||
@@ -5862,6 +5865,12 @@ int __init cgroup_init(void)
|
||||
|
||||
mutex_unlock(&cgroup_mutex);
|
||||
|
||||
|
@ -42,7 +40,7 @@ index d6ea872b23aa..db12e07ce531 100644
|
|||
for_each_subsys(ss, ssid) {
|
||||
if (ss->early_init) {
|
||||
struct cgroup_subsys_state *css =
|
||||
@@ -6409,6 +6418,10 @@ static int __init cgroup_disable(char *str)
|
||||
@@ -6446,6 +6455,10 @@ static int __init cgroup_disable(char *s
|
||||
strcmp(token, ss->legacy_name))
|
||||
continue;
|
||||
|
||||
|
@ -53,7 +51,7 @@ index d6ea872b23aa..db12e07ce531 100644
|
|||
static_branch_disable(cgroup_subsys_enabled_key[i]);
|
||||
pr_info("Disabling %s control group subsystem\n",
|
||||
ss->name);
|
||||
@@ -6427,6 +6440,31 @@ static int __init cgroup_disable(char *str)
|
||||
@@ -6464,6 +6477,31 @@ static int __init cgroup_disable(char *s
|
||||
}
|
||||
__setup("cgroup_disable=", cgroup_disable);
|
||||
|
||||
|
@ -85,6 +83,3 @@ index d6ea872b23aa..db12e07ce531 100644
|
|||
void __init __weak enable_debug_cgroup(void) { }
|
||||
|
||||
static int __init enable_cgroup_debug(char *str)
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 0f195b63e8705152d2774c6213ce3096efc8c14d Mon Sep 17 00:00:00 2001
|
||||
From 47a3b6930287238b8b4878ace1587e4c24d60678 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Fri, 13 Mar 2015 12:43:36 +0000
|
||||
Subject: [PATCH 044/634] Protect __release_resource against resources without
|
||||
Subject: [PATCH 036/828] Protect __release_resource against resources without
|
||||
parents
|
||||
|
||||
Without this patch, removing a device tree overlay can crash here.
|
||||
|
@ -11,11 +11,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
kernel/resource.c | 6 ++++++
|
||||
1 file changed, 6 insertions(+)
|
||||
|
||||
diff --git a/kernel/resource.c b/kernel/resource.c
|
||||
index ca9f5198a01f..dd5ac10ff847 100644
|
||||
--- a/kernel/resource.c
|
||||
+++ b/kernel/resource.c
|
||||
@@ -213,6 +213,12 @@ static int __release_resource(struct resource *old, bool release_child)
|
||||
@@ -188,6 +188,12 @@ static int __release_resource(struct res
|
||||
{
|
||||
struct resource *tmp, **p, *chd;
|
||||
|
||||
|
@ -28,6 +26,3 @@ index ca9f5198a01f..dd5ac10ff847 100644
|
|||
p = &old->parent->child;
|
||||
for (;;) {
|
||||
tmp = *p;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 35a4353310b87f7e10c789cd5818bd83b6787a77 Mon Sep 17 00:00:00 2001
|
||||
From d767edbe02ee502f3dd3f7a9a607fedaa4eebdfb Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Thu, 9 Feb 2017 14:33:30 +0000
|
||||
Subject: [PATCH 045/634] irq-bcm2836: Avoid "Invalid trigger warning"
|
||||
Subject: [PATCH 037/828] irq-bcm2836: Avoid "Invalid trigger warning"
|
||||
|
||||
Initialise the level for each IRQ to avoid a warning from the
|
||||
arm arch timer code.
|
||||
|
@ -11,11 +11,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/irqchip/irq-bcm2836.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c
|
||||
index 501facdb4570..b6a7036305d8 100644
|
||||
--- a/drivers/irqchip/irq-bcm2836.c
|
||||
+++ b/drivers/irqchip/irq-bcm2836.c
|
||||
@@ -128,7 +128,7 @@ static int bcm2836_map(struct irq_domain *d, unsigned int irq,
|
||||
@@ -128,7 +128,7 @@ static int bcm2836_map(struct irq_domain
|
||||
irq_set_percpu_devid(irq);
|
||||
irq_domain_set_info(d, irq, hw, chip, d->host_data,
|
||||
handle_percpu_devid_irq, NULL, NULL);
|
||||
|
@ -24,6 +22,3 @@ index 501facdb4570..b6a7036305d8 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 0fb5b605e449a0af9ea90b253729aa0cc05c1e9c Mon Sep 17 00:00:00 2001
|
||||
From 4625990bc4c0ae8ac4df8021dcd60cc33a640ef7 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Fri, 12 Jun 2015 19:01:05 +0200
|
||||
Subject: [PATCH 046/634] irqchip: bcm2835: Add FIQ support
|
||||
Subject: [PATCH 038/828] irqchip: bcm2835: Add FIQ support
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -18,8 +18,6 @@ Acked-by: Stephen Warren <swarren@wwwdotorg.org>
|
|||
drivers/irqchip/irq-bcm2835.c | 51 +++++++++++++++++++++++++++++++----
|
||||
2 files changed, 47 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
|
||||
index 2890e61b2b46..0462f870ab17 100644
|
||||
--- a/arch/arm/mach-bcm/Kconfig
|
||||
+++ b/arch/arm/mach-bcm/Kconfig
|
||||
@@ -162,6 +162,7 @@ config ARCH_BCM2835
|
||||
|
@ -30,8 +28,6 @@ index 2890e61b2b46..0462f870ab17 100644
|
|||
select PINCTRL
|
||||
select PINCTRL_BCM2835
|
||||
select MFD_CORE
|
||||
diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c
|
||||
index adc1556ed332..0ae3b5d4d2de 100644
|
||||
--- a/drivers/irqchip/irq-bcm2835.c
|
||||
+++ b/drivers/irqchip/irq-bcm2835.c
|
||||
@@ -45,7 +45,7 @@
|
||||
|
@ -57,7 +53,7 @@ index adc1556ed332..0ae3b5d4d2de 100644
|
|||
|
||||
static const int reg_pending[] __initconst = { 0x00, 0x04, 0x08 };
|
||||
static const int reg_enable[] __initconst = { 0x18, 0x10, 0x14 };
|
||||
@@ -89,14 +93,38 @@ static void __exception_irq_entry bcm2835_handle_irq(
|
||||
@@ -89,14 +93,38 @@ static void __exception_irq_entry bcm283
|
||||
struct pt_regs *regs);
|
||||
static void bcm2836_chained_handle_irq(struct irq_desc *desc);
|
||||
|
||||
|
@ -98,7 +94,7 @@ index adc1556ed332..0ae3b5d4d2de 100644
|
|||
}
|
||||
|
||||
static struct irq_chip armctrl_chip = {
|
||||
@@ -142,8 +170,9 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
@@ -142,8 +170,9 @@ static int __init armctrl_of_init(struct
|
||||
if (!base)
|
||||
panic("%pOF: unable to map IC registers\n", node);
|
||||
|
||||
|
@ -110,7 +106,7 @@ index adc1556ed332..0ae3b5d4d2de 100644
|
|||
if (!intc.domain)
|
||||
panic("%pOF: unable to create IRQ domain\n", node);
|
||||
|
||||
@@ -186,6 +215,18 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
@@ -186,6 +215,18 @@ static int __init armctrl_of_init(struct
|
||||
set_handle_irq(bcm2835_handle_irq);
|
||||
}
|
||||
|
||||
|
@ -129,6 +125,3 @@ index adc1556ed332..0ae3b5d4d2de 100644
|
|||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 7accb7f6c01b6922415a0c866f170088e0c28594 Mon Sep 17 00:00:00 2001
|
||||
From d23fc825c76b9d70833702f76c762f9afbadbb19 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Fri, 23 Oct 2015 16:26:55 +0200
|
||||
Subject: [PATCH 047/634] irqchip: irq-bcm2835: Add 2836 FIQ support
|
||||
Subject: [PATCH 039/828] irqchip: irq-bcm2835: Add 2836 FIQ support
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -11,8 +11,6 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||
drivers/irqchip/irq-bcm2835.c | 43 +++++++++++++++++++++++++++++++++--
|
||||
1 file changed, 41 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c
|
||||
index 0ae3b5d4d2de..a6ffff76c539 100644
|
||||
--- a/drivers/irqchip/irq-bcm2835.c
|
||||
+++ b/drivers/irqchip/irq-bcm2835.c
|
||||
@@ -41,8 +41,11 @@
|
||||
|
@ -45,7 +43,7 @@ index 0ae3b5d4d2de..a6ffff76c539 100644
|
|||
};
|
||||
|
||||
static struct armctrl_ic intc __read_mostly;
|
||||
@@ -119,12 +126,35 @@ static void armctrl_mask_irq(struct irq_data *d)
|
||||
@@ -119,12 +126,35 @@ static void armctrl_mask_irq(struct irq_
|
||||
|
||||
static void armctrl_unmask_irq(struct irq_data *d)
|
||||
{
|
||||
|
@ -83,7 +81,7 @@ index 0ae3b5d4d2de..a6ffff76c539 100644
|
|||
}
|
||||
|
||||
static struct irq_chip armctrl_chip = {
|
||||
@@ -215,6 +245,15 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
@@ -215,6 +245,15 @@ static int __init armctrl_of_init(struct
|
||||
set_handle_irq(bcm2835_handle_irq);
|
||||
}
|
||||
|
||||
|
@ -99,6 +97,3 @@ index 0ae3b5d4d2de..a6ffff76c539 100644
|
|||
/* Make a duplicate irq range which is used to enable FIQ */
|
||||
for (b = 0; b < NR_BANKS; b++) {
|
||||
for (i = 0; i < bank_irqs[b]; i++) {
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 0322d4639d99a2c0e472aee8996b566699b6355d Mon Sep 17 00:00:00 2001
|
||||
From 9c1ed77765cbf3b311edfe3be39561e778a355b9 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 14 Jul 2015 10:26:09 +0100
|
||||
Subject: [PATCH 048/634] spi: spidev: Completely disable the spidev warning
|
||||
Subject: [PATCH 040/828] spi: spidev: Completely disable the spidev warning
|
||||
|
||||
An alternative strategy would be to use "rpi,spidev" instead, but that
|
||||
would require many Raspberry Pi Device Tree changes.
|
||||
|
@ -11,11 +11,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/spi/spidev.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/spi/spidev.c b/drivers/spi/spidev.c
|
||||
index 795bef1efcc6..9a3b8a51eaef 100644
|
||||
--- a/drivers/spi/spidev.c
|
||||
+++ b/drivers/spi/spidev.c
|
||||
@@ -746,7 +746,7 @@ static int spidev_probe(struct spi_device *spi)
|
||||
@@ -747,7 +747,7 @@ static int spidev_probe(struct spi_devic
|
||||
* compatible string, it is a Linux implementation thing
|
||||
* rather than a description of the hardware.
|
||||
*/
|
||||
|
@ -24,6 +22,3 @@ index 795bef1efcc6..9a3b8a51eaef 100644
|
|||
of_device_is_compatible(spi->dev.of_node, "spidev"),
|
||||
"%pOF: buggy DT: spidev listed directly in DT\n", spi->dev.of_node);
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 1e5020ac43d2bf03efb094cf68b887de9a121a2e Mon Sep 17 00:00:00 2001
|
||||
From 576f90bdfda30cb1c00611c5e8d677a610e918b0 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Sat, 3 Oct 2015 22:22:55 +0200
|
||||
Subject: [PATCH 049/634] dmaengine: bcm2835: Load driver early and support
|
||||
Subject: [PATCH 041/828] dmaengine: bcm2835: Load driver early and support
|
||||
legacy API
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
|
@ -18,8 +18,6 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||
drivers/dma/bcm2835-dma.c | 26 +++++++++++++++++++++++++-
|
||||
2 files changed, 26 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
|
||||
index 80c2c03cb014..f5afe0ec4f96 100644
|
||||
--- a/drivers/dma/Kconfig
|
||||
+++ b/drivers/dma/Kconfig
|
||||
@@ -127,7 +127,7 @@ config BCM_SBA_RAID
|
||||
|
@ -31,8 +29,6 @@ index 80c2c03cb014..f5afe0ec4f96 100644
|
|||
select DMA_ENGINE
|
||||
select DMA_VIRTUAL_CHANNELS
|
||||
|
||||
diff --git a/drivers/dma/bcm2835-dma.c b/drivers/dma/bcm2835-dma.c
|
||||
index 630dfbb01a40..bf7ba96a39f9 100644
|
||||
--- a/drivers/dma/bcm2835-dma.c
|
||||
+++ b/drivers/dma/bcm2835-dma.c
|
||||
@@ -25,6 +25,7 @@
|
||||
|
@ -51,7 +47,7 @@ index 630dfbb01a40..bf7ba96a39f9 100644
|
|||
|
||||
/**
|
||||
* struct bcm2835_dmadev - BCM2835 DMA controller
|
||||
@@ -906,6 +908,9 @@ static int bcm2835_dma_probe(struct platform_device *pdev)
|
||||
@@ -906,6 +908,9 @@ static int bcm2835_dma_probe(struct plat
|
||||
base = devm_ioremap_resource(&pdev->dev, res);
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
@ -61,7 +57,7 @@ index 630dfbb01a40..bf7ba96a39f9 100644
|
|||
|
||||
od->base = base;
|
||||
|
||||
@@ -951,6 +956,9 @@ static int bcm2835_dma_probe(struct platform_device *pdev)
|
||||
@@ -951,6 +956,9 @@ static int bcm2835_dma_probe(struct plat
|
||||
goto err_no_dma;
|
||||
}
|
||||
|
||||
|
@ -71,7 +67,7 @@ index 630dfbb01a40..bf7ba96a39f9 100644
|
|||
/* get irqs for each channel that we support */
|
||||
for (i = 0; i <= BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED; i++) {
|
||||
/* skip masked out channels */
|
||||
@@ -1025,6 +1033,7 @@ static int bcm2835_dma_remove(struct platform_device *pdev)
|
||||
@@ -1025,6 +1033,7 @@ static int bcm2835_dma_remove(struct pla
|
||||
{
|
||||
struct bcm2835_dmadev *od = platform_get_drvdata(pdev);
|
||||
|
||||
|
@ -79,7 +75,7 @@ index 630dfbb01a40..bf7ba96a39f9 100644
|
|||
dma_async_device_unregister(&od->ddev);
|
||||
bcm2835_dma_free(od);
|
||||
|
||||
@@ -1040,7 +1049,22 @@ static struct platform_driver bcm2835_dma_driver = {
|
||||
@@ -1040,7 +1049,22 @@ static struct platform_driver bcm2835_dm
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -103,6 +99,3 @@ index 630dfbb01a40..bf7ba96a39f9 100644
|
|||
|
||||
MODULE_ALIAS("platform:bcm2835-dma");
|
||||
MODULE_DESCRIPTION("BCM2835 DMA engine driver");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 2fa1a23df8dd065af38db8950c50b385cc96e583 Mon Sep 17 00:00:00 2001
|
||||
From 89020b09b62b7208c6e1dd42dddbe1c3f6caf947 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 15 Jun 2016 16:48:41 +0100
|
||||
Subject: [PATCH 050/634] rtc: Add SPI alias for pcf2123 driver
|
||||
Subject: [PATCH 042/828] rtc: Add SPI alias for pcf2123 driver
|
||||
|
||||
Without this alias, Device Tree won't cause the driver
|
||||
to be loaded.
|
||||
|
@ -11,8 +11,6 @@ See: https://github.com/raspberrypi/linux/pull/1510
|
|||
drivers/rtc/rtc-pcf2123.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/rtc/rtc-pcf2123.c b/drivers/rtc/rtc-pcf2123.c
|
||||
index 7473e6c8a183..4b986b338654 100644
|
||||
--- a/drivers/rtc/rtc-pcf2123.c
|
||||
+++ b/drivers/rtc/rtc-pcf2123.c
|
||||
@@ -473,3 +473,4 @@ module_spi_driver(pcf2123_driver);
|
||||
|
@ -20,6 +18,3 @@ index 7473e6c8a183..4b986b338654 100644
|
|||
MODULE_DESCRIPTION("NXP PCF2123 RTC driver");
|
||||
MODULE_LICENSE("GPL");
|
||||
+MODULE_ALIAS("spi:rtc-pcf2123");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From ee758835da30ce57abee8d3591170f0122a5b3b3 Mon Sep 17 00:00:00 2001
|
||||
From e43b149e1b5cec6127245d41a398e19bc77e787e Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Fri, 7 Oct 2016 16:50:59 +0200
|
||||
Subject: [PATCH 051/634] watchdog: bcm2835: Support setting reboot partition
|
||||
Subject: [PATCH 043/828] watchdog: bcm2835: Support setting reboot partition
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -19,8 +19,6 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||
drivers/watchdog/bcm2835_wdt.c | 49 +++++++++++++++++++---------------
|
||||
1 file changed, 27 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/drivers/watchdog/bcm2835_wdt.c b/drivers/watchdog/bcm2835_wdt.c
|
||||
index 94907176a0e4..58d5a1b89584 100644
|
||||
--- a/drivers/watchdog/bcm2835_wdt.c
|
||||
+++ b/drivers/watchdog/bcm2835_wdt.c
|
||||
@@ -32,13 +32,7 @@
|
||||
|
@ -38,7 +36,7 @@ index 94907176a0e4..58d5a1b89584 100644
|
|||
|
||||
#define SECS_TO_WDOG_TICKS(x) ((x) << 16)
|
||||
#define WDOG_TICKS_TO_SECS(x) ((x) >> 16)
|
||||
@@ -97,9 +91,24 @@ static unsigned int bcm2835_wdt_get_timeleft(struct watchdog_device *wdog)
|
||||
@@ -97,9 +91,24 @@ static unsigned int bcm2835_wdt_get_time
|
||||
return WDOG_TICKS_TO_SECS(ret & PM_WDOG_TIME_SET);
|
||||
}
|
||||
|
||||
|
@ -65,7 +63,7 @@ index 94907176a0e4..58d5a1b89584 100644
|
|||
|
||||
/* use a timeout of 10 ticks (~150us) */
|
||||
writel_relaxed(10 | PM_PASSWORD, wdt->base + PM_WDOG);
|
||||
@@ -117,7 +126,13 @@ static int bcm2835_restart(struct watchdog_device *wdog,
|
||||
@@ -117,7 +126,13 @@ static int bcm2835_restart(struct watchd
|
||||
{
|
||||
struct bcm2835_wdt *wdt = watchdog_get_drvdata(wdog);
|
||||
|
||||
|
@ -80,7 +78,7 @@ index 94907176a0e4..58d5a1b89584 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -152,19 +167,9 @@ static struct watchdog_device bcm2835_wdt_wdd = {
|
||||
@@ -152,19 +167,9 @@ static struct watchdog_device bcm2835_wd
|
||||
static void bcm2835_power_off(void)
|
||||
{
|
||||
struct bcm2835_wdt *wdt = bcm2835_power_off_wdt;
|
||||
|
@ -102,6 +100,3 @@ index 94907176a0e4..58d5a1b89584 100644
|
|||
}
|
||||
|
||||
static int bcm2835_wdt_probe(struct platform_device *pdev)
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,15 +1,13 @@
|
|||
From 10fbf516799bb00bf5c20fa539e7a10da9378ebc Mon Sep 17 00:00:00 2001
|
||||
From 7a658f50ad6404eda6f8bd883485418fcbbac6cb Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 5 Apr 2016 19:40:12 +0100
|
||||
Subject: [PATCH 052/634] reboot: Use power off rather than busy spinning when
|
||||
Subject: [PATCH 044/828] reboot: Use power off rather than busy spinning when
|
||||
halt is requested
|
||||
|
||||
---
|
||||
arch/arm/kernel/reboot.c | 4 +---
|
||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/kernel/reboot.c b/arch/arm/kernel/reboot.c
|
||||
index 3044fcb8d073..fe22c46d9943 100644
|
||||
--- a/arch/arm/kernel/reboot.c
|
||||
+++ b/arch/arm/kernel/reboot.c
|
||||
@@ -101,9 +101,7 @@ void machine_shutdown(void)
|
||||
|
@ -23,6 +21,3 @@ index 3044fcb8d073..fe22c46d9943 100644
|
|||
}
|
||||
|
||||
/*
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,14 +1,12 @@
|
|||
From e81b252831f153b6dc2b270eb66a5f002aed19ee Mon Sep 17 00:00:00 2001
|
||||
From 52370a1cddab2dd8100282ad329c1315ac38048d Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 9 Nov 2016 13:02:52 +0000
|
||||
Subject: [PATCH 053/634] bcm: Make RASPBERRYPI_POWER depend on PM
|
||||
Subject: [PATCH 045/828] bcm: Make RASPBERRYPI_POWER depend on PM
|
||||
|
||||
---
|
||||
drivers/soc/bcm/Kconfig | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/soc/bcm/Kconfig b/drivers/soc/bcm/Kconfig
|
||||
index 24f92a6e882a..a6a705ec30c7 100644
|
||||
--- a/drivers/soc/bcm/Kconfig
|
||||
+++ b/drivers/soc/bcm/Kconfig
|
||||
@@ -17,6 +17,7 @@ config RASPBERRYPI_POWER
|
||||
|
@ -19,6 +17,3 @@ index 24f92a6e882a..a6a705ec30c7 100644
|
|||
select PM_GENERIC_DOMAINS if PM
|
||||
help
|
||||
This enables support for the RPi power domains which can be enabled
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 2240403332a02438761e961cc30e475001e0e971 Mon Sep 17 00:00:00 2001
|
||||
From f29de39e03adc3797d48b526ce78b15acfd01112 Mon Sep 17 00:00:00 2001
|
||||
From: Martin Sperl <kernel@martin.sperl.org>
|
||||
Date: Fri, 2 Sep 2016 16:45:27 +0100
|
||||
Subject: [PATCH 054/634] Register the clocks early during the boot process, so
|
||||
Subject: [PATCH 046/828] Register the clocks early during the boot process, so
|
||||
that special/critical clocks can get enabled early on in the boot process
|
||||
avoiding the risk of disabling a clock, pll_divider or pll when a claiming
|
||||
driver fails to install propperly - maybe it needs to defer.
|
||||
|
@ -11,11 +11,9 @@ Signed-off-by: Martin Sperl <kernel@martin.sperl.org>
|
|||
drivers/clk/bcm/clk-bcm2835.c | 15 +++++++++++++--
|
||||
1 file changed, 13 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 3667b4d731e7..9332379565cb 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -2289,8 +2289,15 @@ static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
@@ -2289,8 +2289,15 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
@ -32,7 +30,7 @@ index 3667b4d731e7..9332379565cb 100644
|
|||
}
|
||||
|
||||
static const struct cprman_plat_data cprman_bcm2835_plat_data = {
|
||||
@@ -2316,7 +2323,11 @@ static struct platform_driver bcm2835_clk_driver = {
|
||||
@@ -2316,7 +2323,11 @@ static struct platform_driver bcm2835_cl
|
||||
.probe = bcm2835_clk_probe,
|
||||
};
|
||||
|
||||
|
@ -45,6 +43,3 @@ index 3667b4d731e7..9332379565cb 100644
|
|||
|
||||
MODULE_AUTHOR("Eric Anholt <eric@anholt.net>");
|
||||
MODULE_DESCRIPTION("BCM2835 clock driver");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,18 +1,16 @@
|
|||
From 6a478cf4989ca434f590096599fe7edf66d4c6f5 Mon Sep 17 00:00:00 2001
|
||||
From 9c44e3e8db46337d314ae91baec5e069554b72be Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Tue, 6 Dec 2016 17:05:39 +0000
|
||||
Subject: [PATCH 055/634] bcm2835-rng: Avoid initialising if already enabled
|
||||
Subject: [PATCH 047/828] bcm2835-rng: Avoid initialising if already enabled
|
||||
|
||||
Avoids the 0x40000 cycles of warmup again if firmware has already used it
|
||||
---
|
||||
drivers/char/hw_random/bcm2835-rng.c | 6 ++++--
|
||||
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c
|
||||
index e7dd457e9b22..f9a4a89e762b 100644
|
||||
--- a/drivers/char/hw_random/bcm2835-rng.c
|
||||
+++ b/drivers/char/hw_random/bcm2835-rng.c
|
||||
@@ -106,8 +106,10 @@ static int bcm2835_rng_init(struct hwrng *rng)
|
||||
@@ -106,8 +106,10 @@ static int bcm2835_rng_init(struct hwrng
|
||||
}
|
||||
|
||||
/* set warm-up count & enable */
|
||||
|
@ -25,6 +23,3 @@ index e7dd457e9b22..f9a4a89e762b 100644
|
|||
|
||||
return ret;
|
||||
}
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From d1b7a7961814d5a60bc1e8494b2308525b42b584 Mon Sep 17 00:00:00 2001
|
||||
From dcce186901246abd12cf6280a4846934aeb5c595 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 13 Feb 2017 17:20:08 +0000
|
||||
Subject: [PATCH 056/634] clk-bcm2835: Mark used PLLs and dividers CRITICAL
|
||||
Subject: [PATCH 048/828] clk-bcm2835: Mark used PLLs and dividers CRITICAL
|
||||
|
||||
The VPU configures and relies on several PLLs and dividers. Mark all
|
||||
enabled dividers and their PLLs as CRITICAL to prevent the kernel from
|
||||
|
@ -12,11 +12,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/clk/bcm/clk-bcm2835.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 9332379565cb..d111f7f4fc81 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1378,6 +1378,11 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman,
|
||||
@@ -1378,6 +1378,11 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
divider->div.hw.init = &init;
|
||||
divider->div.table = NULL;
|
||||
|
||||
|
@ -28,6 +26,3 @@ index 9332379565cb..d111f7f4fc81 100644
|
|||
divider->cprman = cprman;
|
||||
divider->data = divider_data;
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From c1db994a1b6533cb5354f276fc68e95bb0a9bd67 Mon Sep 17 00:00:00 2001
|
||||
From 71691549878c2c1809b96c26bb8b2a87acd68969 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 13 Feb 2017 17:20:08 +0000
|
||||
Subject: [PATCH 057/634] clk-bcm2835: Add claim-clocks property
|
||||
Subject: [PATCH 049/828] clk-bcm2835: Add claim-clocks property
|
||||
|
||||
The claim-clocks property can be used to prevent PLLs and dividers
|
||||
from being marked as critical. It contains a vector of clock IDs,
|
||||
|
@ -15,11 +15,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/clk/bcm/clk-bcm2835.c | 45 ++++++++++++++++++++++++++++++++---
|
||||
1 file changed, 42 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index d111f7f4fc81..76bf4c81316e 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -1306,6 +1306,8 @@ static const struct clk_ops bcm2835_vpu_clock_clk_ops = {
|
||||
@@ -1306,6 +1306,8 @@ static const struct clk_ops bcm2835_vpu_
|
||||
.debug_init = bcm2835_clock_debug_init,
|
||||
};
|
||||
|
||||
|
@ -28,7 +26,7 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
|
||||
const void *data)
|
||||
{
|
||||
@@ -1323,6 +1325,9 @@ static struct clk_hw *bcm2835_register_pll(struct bcm2835_cprman *cprman,
|
||||
@@ -1323,6 +1325,9 @@ static struct clk_hw *bcm2835_register_p
|
||||
init.ops = &bcm2835_pll_clk_ops;
|
||||
init.flags = pll_data->flags | CLK_IGNORE_UNUSED;
|
||||
|
||||
|
@ -38,7 +36,7 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
pll = kzalloc(sizeof(*pll), GFP_KERNEL);
|
||||
if (!pll)
|
||||
return NULL;
|
||||
@@ -1378,9 +1383,11 @@ bcm2835_register_pll_divider(struct bcm2835_cprman *cprman,
|
||||
@@ -1378,9 +1383,11 @@ bcm2835_register_pll_divider(struct bcm2
|
||||
divider->div.hw.init = &init;
|
||||
divider->div.table = NULL;
|
||||
|
||||
|
@ -53,11 +51,10 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
}
|
||||
|
||||
divider->cprman = cprman;
|
||||
@@ -1436,6 +1443,15 @@ static struct clk_hw *bcm2835_register_clock(struct bcm2835_cprman *cprman,
|
||||
init.name = clock_data->name;
|
||||
@@ -1437,6 +1444,15 @@ static struct clk_hw *bcm2835_register_c
|
||||
init.flags = clock_data->flags | CLK_IGNORE_UNUSED;
|
||||
|
||||
+ /*
|
||||
/*
|
||||
+ * Some GPIO clocks for ethernet/wifi PLLs are marked as
|
||||
+ * critical (since some platforms use them), but if the
|
||||
+ * firmware didn't have them turned on then they clearly
|
||||
|
@ -66,10 +63,11 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
+ if ((cprman_read(cprman, clock_data->ctl_reg) & CM_ENABLE) == 0)
|
||||
+ init.flags &= ~CLK_IS_CRITICAL;
|
||||
+
|
||||
/*
|
||||
+ /*
|
||||
* Pass the CLK_SET_RATE_PARENT flag if we are allowed to propagate
|
||||
* rate changes on at least of the parents.
|
||||
@@ -2215,6 +2231,8 @@ static const struct bcm2835_clk_desc clk_desc_array[] = {
|
||||
*/
|
||||
@@ -2215,6 +2231,8 @@ static const struct bcm2835_clk_desc clk
|
||||
.ctl_reg = CM_PERIICTL),
|
||||
};
|
||||
|
||||
|
@ -78,7 +76,7 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
/*
|
||||
* Permanently take a reference on the parent of the SDRAM clock.
|
||||
*
|
||||
@@ -2234,6 +2252,19 @@ static int bcm2835_mark_sdc_parent_critical(struct clk *sdc)
|
||||
@@ -2234,6 +2252,19 @@ static int bcm2835_mark_sdc_parent_criti
|
||||
return clk_prepare_enable(parent);
|
||||
}
|
||||
|
||||
|
@ -98,7 +96,7 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device *dev = &pdev->dev;
|
||||
@@ -2243,6 +2274,7 @@ static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
@@ -2243,6 +2274,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
const size_t asize = ARRAY_SIZE(clk_desc_array);
|
||||
const struct cprman_plat_data *pdata;
|
||||
size_t i;
|
||||
|
@ -106,7 +104,7 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
int ret;
|
||||
|
||||
pdata = of_device_get_match_data(&pdev->dev);
|
||||
@@ -2261,6 +2293,13 @@ static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
@@ -2261,6 +2293,13 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (IS_ERR(cprman->regs))
|
||||
return PTR_ERR(cprman->regs);
|
||||
|
||||
|
@ -120,6 +118,3 @@ index d111f7f4fc81..76bf4c81316e 100644
|
|||
memcpy(cprman->real_parent_names, cprman_parent_names,
|
||||
sizeof(cprman_parent_names));
|
||||
of_clk_parent_fill(dev->of_node, cprman->real_parent_names,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From e096dfdc7d68b3fef9f5338df8df679969b1bc8a Mon Sep 17 00:00:00 2001
|
||||
From 4e3e5995804776cd5425928cd3bbbc74750643ed Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Mon, 6 Mar 2017 09:06:18 +0000
|
||||
Subject: [PATCH 058/634] clk-bcm2835: Read max core clock from firmware
|
||||
Subject: [PATCH 050/828] clk-bcm2835: Read max core clock from firmware
|
||||
|
||||
The VPU is responsible for managing the core clock, usually under
|
||||
direction from the bcm2835-cpufreq driver but not via the clk-bcm2835
|
||||
|
@ -23,8 +23,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/clk/bcm/clk-bcm2835.c | 39 ++++++++++++++++++++++++++++++++++-
|
||||
1 file changed, 38 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/clk/bcm/clk-bcm2835.c b/drivers/clk/bcm/clk-bcm2835.c
|
||||
index 76bf4c81316e..9b9a799a487d 100644
|
||||
--- a/drivers/clk/bcm/clk-bcm2835.c
|
||||
+++ b/drivers/clk/bcm/clk-bcm2835.c
|
||||
@@ -35,6 +35,7 @@
|
||||
|
@ -44,7 +42,7 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
/*
|
||||
* Names of clocks used within the driver that need to be replaced
|
||||
* with an external parent's name. This array is in the order that
|
||||
@@ -313,6 +316,7 @@ static const char *const cprman_parent_names[] = {
|
||||
@@ -313,6 +316,7 @@ static const char *const cprman_parent_n
|
||||
struct bcm2835_cprman {
|
||||
struct device *dev;
|
||||
void __iomem *regs;
|
||||
|
@ -52,7 +50,7 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
spinlock_t regs_lock; /* spinlock for all clocks */
|
||||
unsigned int soc;
|
||||
|
||||
@@ -1010,6 +1014,30 @@ static unsigned long bcm2835_clock_get_rate(struct clk_hw *hw,
|
||||
@@ -1010,6 +1014,30 @@ static unsigned long bcm2835_clock_get_r
|
||||
return bcm2835_clock_rate_from_divisor(clock, parent_rate, div);
|
||||
}
|
||||
|
||||
|
@ -83,7 +81,7 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
static void bcm2835_clock_wait_busy(struct bcm2835_clock *clock)
|
||||
{
|
||||
struct bcm2835_cprman *cprman = clock->cprman;
|
||||
@@ -1298,7 +1326,7 @@ static int bcm2835_vpu_clock_is_on(struct clk_hw *hw)
|
||||
@@ -1298,7 +1326,7 @@ static int bcm2835_vpu_clock_is_on(struc
|
||||
*/
|
||||
static const struct clk_ops bcm2835_vpu_clock_clk_ops = {
|
||||
.is_prepared = bcm2835_vpu_clock_is_on,
|
||||
|
@ -92,7 +90,7 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
.set_rate = bcm2835_clock_set_rate,
|
||||
.determine_rate = bcm2835_clock_determine_rate,
|
||||
.set_parent = bcm2835_clock_set_parent,
|
||||
@@ -2273,6 +2301,7 @@ static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
@@ -2273,6 +2301,7 @@ static int bcm2835_clk_probe(struct plat
|
||||
const struct bcm2835_clk_desc *desc;
|
||||
const size_t asize = ARRAY_SIZE(clk_desc_array);
|
||||
const struct cprman_plat_data *pdata;
|
||||
|
@ -100,7 +98,7 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
size_t i;
|
||||
u32 clk_id;
|
||||
int ret;
|
||||
@@ -2293,6 +2322,14 @@ static int bcm2835_clk_probe(struct platform_device *pdev)
|
||||
@@ -2293,6 +2322,14 @@ static int bcm2835_clk_probe(struct plat
|
||||
if (IS_ERR(cprman->regs))
|
||||
return PTR_ERR(cprman->regs);
|
||||
|
||||
|
@ -115,6 +113,3 @@ index 76bf4c81316e..9b9a799a487d 100644
|
|||
memset(bcm2835_clk_claimed, 0, sizeof(bcm2835_clk_claimed));
|
||||
for (i = 0;
|
||||
!of_property_read_u32_index(pdev->dev.of_node, "claim-clocks",
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 322604e2085fc8b6e13a211718200ebd8802fb29 Mon Sep 17 00:00:00 2001
|
||||
From d91e03b406108d5134bfd4e059327ce68b356fa0 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Thu, 9 Feb 2017 14:36:44 +0000
|
||||
Subject: [PATCH 059/634] sound: Demote deferral errors to INFO level
|
||||
Subject: [PATCH 051/828] sound: Demote deferral errors to INFO level
|
||||
|
||||
At present there is no mechanism to specify driver load order,
|
||||
which can lead to deferrals and repeated retries until successful.
|
||||
|
@ -13,11 +13,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
sound/soc/soc-core.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
|
||||
index 80ca260595fd..633b02b43c9f 100644
|
||||
--- a/sound/soc/soc-core.c
|
||||
+++ b/sound/soc/soc-core.c
|
||||
@@ -1017,7 +1017,7 @@ int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
|
||||
@@ -1017,7 +1017,7 @@ int snd_soc_add_pcm_runtime(struct snd_s
|
||||
for_each_link_cpus(dai_link, i, cpu) {
|
||||
asoc_rtd_to_cpu(rtd, i) = snd_soc_find_dai(cpu);
|
||||
if (!asoc_rtd_to_cpu(rtd, i)) {
|
||||
|
@ -26,7 +24,7 @@ index 80ca260595fd..633b02b43c9f 100644
|
|||
cpu->dai_name);
|
||||
goto _err_defer;
|
||||
}
|
||||
@@ -1028,7 +1028,7 @@ int snd_soc_add_pcm_runtime(struct snd_soc_card *card,
|
||||
@@ -1028,7 +1028,7 @@ int snd_soc_add_pcm_runtime(struct snd_s
|
||||
for_each_link_codecs(dai_link, i, codec) {
|
||||
asoc_rtd_to_codec(rtd, i) = snd_soc_find_dai(codec);
|
||||
if (!asoc_rtd_to_codec(rtd, i)) {
|
||||
|
@ -35,6 +33,3 @@ index 80ca260595fd..633b02b43c9f 100644
|
|||
codec->dai_name);
|
||||
goto _err_defer;
|
||||
}
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 87d19cf28c0d690c08b0f2d172922fd9ed14b568 Mon Sep 17 00:00:00 2001
|
||||
From faff7b1971f9c03fbadc26f11e0a78cdbeb89ea3 Mon Sep 17 00:00:00 2001
|
||||
From: Claggy3 <stephen.maclagan@hotmail.com>
|
||||
Date: Sat, 11 Feb 2017 14:00:30 +0000
|
||||
Subject: [PATCH 060/634] Update vfpmodule.c
|
||||
Subject: [PATCH 052/828] Update vfpmodule.c
|
||||
|
||||
Christopher Alexander Tobias Schulze - May 2, 2015, 11:57 a.m.
|
||||
This patch fixes a problem with VFP state save and restore related
|
||||
|
@ -59,11 +59,9 @@ Signed-off-by: Christopher Alexander Tobias Schulze <cat.schulze@alice-dsl.net>
|
|||
arch/arm/vfp/vfpmodule.c | 25 +++++++++++++++++++------
|
||||
1 file changed, 19 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
|
||||
index 2cb355c1b5b7..1e2dcf81aefa 100644
|
||||
--- a/arch/arm/vfp/vfpmodule.c
|
||||
+++ b/arch/arm/vfp/vfpmodule.c
|
||||
@@ -176,8 +176,11 @@ static int vfp_notifier(struct notifier_block *self, unsigned long cmd, void *v)
|
||||
@@ -176,8 +176,11 @@ static int vfp_notifier(struct notifier_
|
||||
* case the thread migrates to a different CPU. The
|
||||
* restoring is done lazily.
|
||||
*/
|
||||
|
@ -94,7 +92,7 @@ index 2cb355c1b5b7..1e2dcf81aefa 100644
|
|||
vfp_save_state(vfp_current_hw_state[ti->cpu], fpexc);
|
||||
fmxr(FPEXC, fpexc);
|
||||
#endif
|
||||
@@ -523,7 +529,8 @@ void vfp_sync_hwstate(struct thread_info *thread)
|
||||
@@ -523,7 +529,8 @@ void vfp_sync_hwstate(struct thread_info
|
||||
/*
|
||||
* Save the last VFP state on this CPU.
|
||||
*/
|
||||
|
@ -104,7 +102,7 @@ index 2cb355c1b5b7..1e2dcf81aefa 100644
|
|||
vfp_save_state(&thread->vfpstate, fpexc | FPEXC_EN);
|
||||
fmxr(FPEXC, fpexc);
|
||||
}
|
||||
@@ -589,6 +596,7 @@ int vfp_restore_user_hwstate(struct user_vfp *ufp, struct user_vfp_exc *ufp_exc)
|
||||
@@ -589,6 +596,7 @@ int vfp_restore_user_hwstate(struct user
|
||||
struct thread_info *thread = current_thread_info();
|
||||
struct vfp_hard_struct *hwstate = &thread->vfpstate.hard;
|
||||
unsigned long fpexc;
|
||||
|
@ -112,7 +110,7 @@ index 2cb355c1b5b7..1e2dcf81aefa 100644
|
|||
|
||||
/* Disable VFP to avoid corrupting the new thread state. */
|
||||
vfp_flush_hwstate(thread);
|
||||
@@ -611,8 +619,12 @@ int vfp_restore_user_hwstate(struct user_vfp *ufp, struct user_vfp_exc *ufp_exc)
|
||||
@@ -611,8 +619,12 @@ int vfp_restore_user_hwstate(struct user
|
||||
/* Ensure the VFP is enabled. */
|
||||
fpexc |= FPEXC_EN;
|
||||
|
||||
|
@ -137,6 +135,3 @@ index 2cb355c1b5b7..1e2dcf81aefa 100644
|
|||
|
||||
/*
|
||||
* Save the userland NEON/VFP state. Under UP,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From e8015f39c17a5a2f91cbac60cd39069220a0d2ac Mon Sep 17 00:00:00 2001
|
||||
From 1e04beb3cb702f3d57cf5111a8fd21068454f78c Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Tue, 1 Nov 2016 15:15:41 +0100
|
||||
Subject: [PATCH 061/634] i2c: bcm2835: Add debug support
|
||||
Subject: [PATCH 053/828] i2c: bcm2835: Add debug support
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -35,11 +35,9 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||
drivers/i2c/busses/i2c-bcm2835.c | 99 +++++++++++++++++++++++++++++++-
|
||||
1 file changed, 98 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/i2c/busses/i2c-bcm2835.c b/drivers/i2c/busses/i2c-bcm2835.c
|
||||
index 37443edbf754..18b2e9e3d752 100644
|
||||
--- a/drivers/i2c/busses/i2c-bcm2835.c
|
||||
+++ b/drivers/i2c/busses/i2c-bcm2835.c
|
||||
@@ -51,6 +51,18 @@
|
||||
@@ -56,6 +56,18 @@
|
||||
#define BCM2835_I2C_CDIV_MIN 0x0002
|
||||
#define BCM2835_I2C_CDIV_MAX 0xFFFE
|
||||
|
||||
|
@ -58,7 +56,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
struct bcm2835_i2c_dev {
|
||||
struct device *dev;
|
||||
void __iomem *regs;
|
||||
@@ -63,8 +75,78 @@ struct bcm2835_i2c_dev {
|
||||
@@ -68,8 +80,78 @@ struct bcm2835_i2c_dev {
|
||||
u32 msg_err;
|
||||
u8 *msg_buf;
|
||||
size_t msg_buf_remaining;
|
||||
|
@ -137,7 +135,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
static inline void bcm2835_i2c_writel(struct bcm2835_i2c_dev *i2c_dev,
|
||||
u32 reg, u32 val)
|
||||
{
|
||||
@@ -252,6 +334,7 @@ static void bcm2835_i2c_start_transfer(struct bcm2835_i2c_dev *i2c_dev)
|
||||
@@ -257,6 +339,7 @@ static void bcm2835_i2c_start_transfer(s
|
||||
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_A, msg->addr);
|
||||
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_DLEN, msg->len);
|
||||
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C, c);
|
||||
|
@ -145,7 +143,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
}
|
||||
|
||||
static void bcm2835_i2c_finish_transfer(struct bcm2835_i2c_dev *i2c_dev)
|
||||
@@ -278,6 +361,7 @@ static irqreturn_t bcm2835_i2c_isr(int this_irq, void *data)
|
||||
@@ -283,6 +366,7 @@ static irqreturn_t bcm2835_i2c_isr(int t
|
||||
u32 val, err;
|
||||
|
||||
val = bcm2835_i2c_readl(i2c_dev, BCM2835_I2C_S);
|
||||
|
@ -153,7 +151,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
|
||||
err = val & (BCM2835_I2C_S_CLKT | BCM2835_I2C_S_ERR);
|
||||
if (err) {
|
||||
@@ -344,6 +428,13 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
|
||||
@@ -349,6 +433,13 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
||||
unsigned long time_left;
|
||||
int i;
|
||||
|
||||
|
@ -167,7 +165,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
for (i = 0; i < (num - 1); i++)
|
||||
if (msgs[i].flags & I2C_M_RD) {
|
||||
dev_warn_once(i2c_dev->dev,
|
||||
@@ -362,6 +453,10 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
|
||||
@@ -367,6 +458,10 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
||||
|
||||
bcm2835_i2c_finish_transfer(i2c_dev);
|
||||
|
||||
|
@ -178,7 +176,7 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
if (!time_left) {
|
||||
bcm2835_i2c_writel(i2c_dev, BCM2835_I2C_C,
|
||||
BCM2835_I2C_C_CLEAR);
|
||||
@@ -372,7 +467,9 @@ static int bcm2835_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[],
|
||||
@@ -377,7 +472,9 @@ static int bcm2835_i2c_xfer(struct i2c_a
|
||||
if (!i2c_dev->msg_err)
|
||||
return num;
|
||||
|
||||
|
@ -189,6 +187,3 @@ index 37443edbf754..18b2e9e3d752 100644
|
|||
|
||||
if (i2c_dev->msg_err & BCM2835_I2C_S_ERR)
|
||||
return -EREMOTEIO;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From afad4ffe2d466cadf396592d78df9cdb16041c26 Mon Sep 17 00:00:00 2001
|
||||
From 990b66cf837f2088744d63764983943e9df13e6a Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 23 Jan 2018 16:52:45 +0000
|
||||
Subject: [PATCH 062/634] irqchip: irq-bcm2836: Remove regmap and syscon use
|
||||
Subject: [PATCH 054/828] irqchip: irq-bcm2836: Remove regmap and syscon use
|
||||
|
||||
The syscon node defines a register range that duplicates that used by
|
||||
the local_intc node on bcm2836/7. Since irq-bcm2835 and irq-bcm2836 are
|
||||
|
@ -20,8 +20,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/irqchip/irq-bcm2836.c | 5 +++++
|
||||
2 files changed, 17 insertions(+), 20 deletions(-)
|
||||
|
||||
diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c
|
||||
index a6ffff76c539..e08c209521ac 100644
|
||||
--- a/drivers/irqchip/irq-bcm2835.c
|
||||
+++ b/drivers/irqchip/irq-bcm2835.c
|
||||
@@ -41,8 +41,6 @@
|
||||
|
@ -42,7 +40,7 @@ index a6ffff76c539..e08c209521ac 100644
|
|||
};
|
||||
|
||||
static struct armctrl_ic intc __read_mostly;
|
||||
@@ -129,24 +127,20 @@ static void armctrl_unmask_irq(struct irq_data *d)
|
||||
@@ -129,24 +127,20 @@ static void armctrl_unmask_irq(struct ir
|
||||
if (d->hwirq >= NUMBER_IRQS) {
|
||||
if (num_online_cpus() > 1) {
|
||||
unsigned int data;
|
||||
|
@ -74,7 +72,7 @@ index a6ffff76c539..e08c209521ac 100644
|
|||
}
|
||||
|
||||
writel_relaxed(REG_FIQ_ENABLE | hwirq_to_fiq(d->hwirq),
|
||||
@@ -246,12 +240,10 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
@@ -246,12 +240,10 @@ static int __init armctrl_of_init(struct
|
||||
}
|
||||
|
||||
if (is_2836) {
|
||||
|
@ -91,8 +89,6 @@ index a6ffff76c539..e08c209521ac 100644
|
|||
}
|
||||
|
||||
/* Make a duplicate irq range which is used to enable FIQ */
|
||||
diff --git a/drivers/irqchip/irq-bcm2836.c b/drivers/irqchip/irq-bcm2836.c
|
||||
index b6a7036305d8..867c3b43490c 100644
|
||||
--- a/drivers/irqchip/irq-bcm2836.c
|
||||
+++ b/drivers/irqchip/irq-bcm2836.c
|
||||
@@ -22,6 +22,9 @@ struct bcm2836_arm_irqchip_intc {
|
||||
|
@ -105,7 +101,7 @@ index b6a7036305d8..867c3b43490c 100644
|
|||
static void bcm2836_arm_irqchip_mask_per_cpu_irq(unsigned int reg_offset,
|
||||
unsigned int bit,
|
||||
int cpu)
|
||||
@@ -323,6 +326,8 @@ static int __init bcm2836_arm_irqchip_l1_intc_of_init(struct device_node *node,
|
||||
@@ -323,6 +326,8 @@ static int __init bcm2836_arm_irqchip_l1
|
||||
panic("%pOF: unable to map local interrupt registers\n", node);
|
||||
}
|
||||
|
||||
|
@ -114,6 +110,3 @@ index b6a7036305d8..867c3b43490c 100644
|
|||
bcm2835_init_local_timer_frequency();
|
||||
|
||||
intc.domain = irq_domain_add_linear(node, LAST_IRQ + 1,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 68c76ce879b7e970a748f8c2686f25ac3b817f7e Mon Sep 17 00:00:00 2001
|
||||
From 191379e03871c844045018dff9913dcacb5561e1 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 17 Oct 2017 15:04:29 +0100
|
||||
Subject: [PATCH 063/634] lan78xx: Enable LEDs and auto-negotiation
|
||||
Subject: [PATCH 055/828] lan78xx: Enable LEDs and auto-negotiation
|
||||
|
||||
For applications of the LAN78xx that don't have valid programmed
|
||||
EEPROMs or OTPs, enabling both LEDs and auto-negotiation by default
|
||||
|
@ -12,11 +12,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/net/usb/lan78xx.c | 12 ++++++++++++
|
||||
1 file changed, 12 insertions(+)
|
||||
|
||||
diff --git a/drivers/net/usb/lan78xx.c b/drivers/net/usb/lan78xx.c
|
||||
index 63cd72c5f580..3d39f34bc641 100644
|
||||
--- a/drivers/net/usb/lan78xx.c
|
||||
+++ b/drivers/net/usb/lan78xx.c
|
||||
@@ -2714,6 +2714,11 @@ static int lan78xx_reset(struct lan78xx_net *dev)
|
||||
@@ -2716,6 +2716,11 @@ static int lan78xx_reset(struct lan78xx_
|
||||
int ret;
|
||||
u32 buf;
|
||||
u8 sig;
|
||||
|
@ -28,7 +26,7 @@ index 63cd72c5f580..3d39f34bc641 100644
|
|||
|
||||
ret = lan78xx_read_reg(dev, HW_CFG, &buf);
|
||||
if (ret < 0)
|
||||
@@ -2795,6 +2800,10 @@ static int lan78xx_reset(struct lan78xx_net *dev)
|
||||
@@ -2797,6 +2802,10 @@ static int lan78xx_reset(struct lan78xx_
|
||||
|
||||
buf |= HW_CFG_MEF_;
|
||||
|
||||
|
@ -39,7 +37,7 @@ index 63cd72c5f580..3d39f34bc641 100644
|
|||
ret = lan78xx_write_reg(dev, HW_CFG, buf);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -2893,6 +2902,9 @@ static int lan78xx_reset(struct lan78xx_net *dev)
|
||||
@@ -2895,6 +2904,9 @@ static int lan78xx_reset(struct lan78xx_
|
||||
buf |= MAC_CR_AUTO_DUPLEX_ | MAC_CR_AUTO_SPEED_;
|
||||
}
|
||||
}
|
||||
|
@ -49,6 +47,3 @@ index 63cd72c5f580..3d39f34bc641 100644
|
|||
ret = lan78xx_write_reg(dev, MAC_CR, buf);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From f5381879293b3019d229028a3fc30e0f6e6b9539 Mon Sep 17 00:00:00 2001
|
||||
From 47ea899493e9814e8b627d98b9f19c56331cddfd Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Tue, 23 Feb 2016 17:26:48 +0000
|
||||
Subject: [PATCH 064/634] amba_pl011: Don't use DT aliases for numbering
|
||||
Subject: [PATCH 056/828] amba_pl011: Don't use DT aliases for numbering
|
||||
|
||||
The pl011 driver looks for DT aliases of the form "serial<n>",
|
||||
and if found uses <n> as the device ID. This can cause
|
||||
|
@ -12,11 +12,9 @@ use the same logic.
|
|||
drivers/tty/serial/amba-pl011.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index d361cd84ff8c..82429e05ed7d 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -2752,7 +2752,12 @@ static int pl011_setup_port(struct device *dev, struct uart_amba_port *uap,
|
||||
@@ -2733,7 +2733,12 @@ static int pl011_setup_port(struct devic
|
||||
if (IS_ERR(base))
|
||||
return PTR_ERR(base);
|
||||
|
||||
|
@ -29,6 +27,3 @@ index d361cd84ff8c..82429e05ed7d 100644
|
|||
|
||||
uap->old_cr = 0;
|
||||
uap->port.dev = dev;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 676d05db81365c6c247a626ad9bfec58a1fe45b1 Mon Sep 17 00:00:00 2001
|
||||
From e747140c826eb558f1743d5a2ff9bb9d9085e011 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 1 Mar 2017 16:07:39 +0000
|
||||
Subject: [PATCH 065/634] amba_pl011: Round input clock up
|
||||
Subject: [PATCH 057/828] amba_pl011: Round input clock up
|
||||
|
||||
The UART clock is initialised to be as close to the requested
|
||||
frequency as possible without exceeding it. Now that there is a
|
||||
|
@ -24,11 +24,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/tty/serial/amba-pl011.c | 23 +++++++++++++++++++++--
|
||||
1 file changed, 21 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index 82429e05ed7d..83c5ab78b0d0 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -1716,6 +1716,23 @@ static void pl011_put_poll_char(struct uart_port *port,
|
||||
@@ -1720,6 +1720,23 @@ static void pl011_put_poll_char(struct u
|
||||
|
||||
#endif /* CONFIG_CONSOLE_POLL */
|
||||
|
||||
|
@ -52,7 +50,7 @@ index 82429e05ed7d..83c5ab78b0d0 100644
|
|||
static int pl011_hwinit(struct uart_port *port)
|
||||
{
|
||||
struct uart_amba_port *uap =
|
||||
@@ -1732,7 +1749,7 @@ static int pl011_hwinit(struct uart_port *port)
|
||||
@@ -1736,7 +1753,7 @@ static int pl011_hwinit(struct uart_port
|
||||
if (retval)
|
||||
return retval;
|
||||
|
||||
|
@ -61,7 +59,7 @@ index 82429e05ed7d..83c5ab78b0d0 100644
|
|||
|
||||
/* Clear pending error and receive interrupts */
|
||||
pl011_write(UART011_OEIS | UART011_BEIS | UART011_PEIS |
|
||||
@@ -2448,7 +2465,7 @@ static int pl011_console_setup(struct console *co, char *options)
|
||||
@@ -2429,7 +2446,7 @@ static int pl011_console_setup(struct co
|
||||
plat->init();
|
||||
}
|
||||
|
||||
|
@ -70,7 +68,7 @@ index 82429e05ed7d..83c5ab78b0d0 100644
|
|||
|
||||
if (uap->vendor->fixed_options) {
|
||||
baud = uap->fixed_baud;
|
||||
@@ -2665,6 +2682,7 @@ static struct uart_driver amba_reg = {
|
||||
@@ -2646,6 +2663,7 @@ static struct uart_driver amba_reg = {
|
||||
.cons = AMBA_CONSOLE,
|
||||
};
|
||||
|
||||
|
@ -78,7 +76,7 @@ index 82429e05ed7d..83c5ab78b0d0 100644
|
|||
static int pl011_probe_dt_alias(int index, struct device *dev)
|
||||
{
|
||||
struct device_node *np;
|
||||
@@ -2696,6 +2714,7 @@ static int pl011_probe_dt_alias(int index, struct device *dev)
|
||||
@@ -2677,6 +2695,7 @@ static int pl011_probe_dt_alias(int inde
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -86,6 +84,3 @@ index 82429e05ed7d..83c5ab78b0d0 100644
|
|||
|
||||
/* unregisters the driver also if no more ports are left */
|
||||
static void pl011_unregister_port(struct uart_amba_port *uap)
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From a62a788b8b85ec1ddcb720d9b4587a43a8a263e8 Mon Sep 17 00:00:00 2001
|
||||
From b7091bd20c8d42fe27ca48d649fadb6dfb07608b Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Fri, 29 Sep 2017 10:32:19 +0100
|
||||
Subject: [PATCH 066/634] amba_pl011: Insert mb() for correct FIFO handling
|
||||
Subject: [PATCH 058/828] amba_pl011: Insert mb() for correct FIFO handling
|
||||
|
||||
The pl011 register accessor functions use the _relaxed versions of the
|
||||
standard readl() and writel() functions, meaning that there are no
|
||||
|
@ -15,11 +15,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/tty/serial/amba-pl011.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index 83c5ab78b0d0..e940909308b0 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -1418,6 +1418,7 @@ static bool pl011_tx_char(struct uart_amba_port *uap, unsigned char c,
|
||||
@@ -1418,6 +1418,7 @@ static bool pl011_tx_char(struct uart_am
|
||||
return false; /* unable to transmit character */
|
||||
|
||||
pl011_write(c, uap, REG_DR);
|
||||
|
@ -27,6 +25,3 @@ index 83c5ab78b0d0..e940909308b0 100644
|
|||
uap->port.icount.tx++;
|
||||
|
||||
return true;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 5c24e541edade9b7dee3d462c078199733072b23 Mon Sep 17 00:00:00 2001
|
||||
From 36f680f4c877dfefa5a4406f3e12c5c1aa9c23e1 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Fri, 29 Sep 2017 10:32:19 +0100
|
||||
Subject: [PATCH 067/634] amba_pl011: Add cts-event-workaround DT property
|
||||
Subject: [PATCH 059/828] amba_pl011: Add cts-event-workaround DT property
|
||||
|
||||
The BCM2835 PL011 implementation seems to have a bug that can lead to a
|
||||
transmission lockup if CTS changes frequently. A workaround was added to
|
||||
|
@ -19,8 +19,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/tty/serial/amba-pl011.c | 5 +++++
|
||||
2 files changed, 11 insertions(+)
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/serial/pl011.yaml b/Documentation/devicetree/bindings/serial/pl011.yaml
|
||||
index 5ea00f8a283d..8df2883abc04 100644
|
||||
--- a/Documentation/devicetree/bindings/serial/pl011.yaml
|
||||
+++ b/Documentation/devicetree/bindings/serial/pl011.yaml
|
||||
@@ -91,6 +91,12 @@ properties:
|
||||
|
@ -36,11 +34,9 @@ index 5ea00f8a283d..8df2883abc04 100644
|
|||
required:
|
||||
- compatible
|
||||
- reg
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index e940909308b0..44a5cbf92542 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -2843,6 +2843,11 @@ static int pl011_probe(struct amba_device *dev, const struct amba_id *id)
|
||||
@@ -2824,6 +2824,11 @@ static int pl011_probe(struct amba_devic
|
||||
if (IS_ERR(uap->clk))
|
||||
return PTR_ERR(uap->clk);
|
||||
|
||||
|
@ -52,6 +48,3 @@ index e940909308b0..44a5cbf92542 100644
|
|||
uap->reg_offset = vendor->reg_offset;
|
||||
uap->vendor = vendor;
|
||||
uap->fifosize = vendor->get_fifosize(dev);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From b09e7ee5c298c9a22c2018ee6d2f81f50c687b71 Mon Sep 17 00:00:00 2001
|
||||
From f6185bce3d95e12cce0eb27c10ce6d7e308681d7 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Fri, 24 Jan 2020 11:38:28 +0000
|
||||
Subject: [PATCH 068/634] tty: amba-pl011: Add un/throttle support
|
||||
Subject: [PATCH 060/828] tty: amba-pl011: Add un/throttle support
|
||||
|
||||
The PL011 driver lacks throttle and unthrottle methods. As a result,
|
||||
sending more data to the Pi than it can immediately sink while CRTSCTS
|
||||
|
@ -15,11 +15,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/tty/serial/amba-pl011.c | 28 ++++++++++++++++++++++++++++
|
||||
1 file changed, 28 insertions(+)
|
||||
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index 44a5cbf92542..5e9a789e3c15 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -1355,6 +1355,32 @@ static void pl011_start_tx(struct uart_port *port)
|
||||
@@ -1355,6 +1355,32 @@ static void pl011_start_tx(struct uart_p
|
||||
pl011_start_tx_pio(uap);
|
||||
}
|
||||
|
||||
|
@ -52,7 +50,7 @@ index 44a5cbf92542..5e9a789e3c15 100644
|
|||
static void pl011_stop_rx(struct uart_port *port)
|
||||
{
|
||||
struct uart_amba_port *uap =
|
||||
@@ -2286,6 +2312,8 @@ static const struct uart_ops amba_pl011_pops = {
|
||||
@@ -2271,6 +2297,8 @@ static const struct uart_ops amba_pl011_
|
||||
.stop_tx = pl011_stop_tx,
|
||||
.start_tx = pl011_start_tx,
|
||||
.stop_rx = pl011_stop_rx,
|
||||
|
@ -61,6 +59,3 @@ index 44a5cbf92542..5e9a789e3c15 100644
|
|||
.enable_ms = pl011_enable_ms,
|
||||
.break_ctl = pl011_break_ctl,
|
||||
.startup = pl011_startup,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 4957c6f9a91339b182625ad74aee2b392aa5d148 Mon Sep 17 00:00:00 2001
|
||||
From 27817f65220792b0f820e9da8bec49c75cc25ab3 Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 29 Jan 2020 09:35:19 +0000
|
||||
Subject: [PATCH 069/634] tty: amba-pl011: Avoid rare write-when-full error
|
||||
Subject: [PATCH 061/828] tty: amba-pl011: Avoid rare write-when-full error
|
||||
|
||||
Under some circumstances on BCM283x processors data loss can be
|
||||
observed - a single byte missing from the TX output stream. These bytes
|
||||
|
@ -27,11 +27,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org>
|
|||
drivers/tty/serial/amba-pl011.c | 4 ++++
|
||||
1 file changed, 4 insertions(+)
|
||||
|
||||
diff --git a/drivers/tty/serial/amba-pl011.c b/drivers/tty/serial/amba-pl011.c
|
||||
index 5e9a789e3c15..979fce6a05a7 100644
|
||||
--- a/drivers/tty/serial/amba-pl011.c
|
||||
+++ b/drivers/tty/serial/amba-pl011.c
|
||||
@@ -1505,6 +1505,10 @@ static bool pl011_tx_chars(struct uart_amba_port *uap, bool from_irq)
|
||||
@@ -1505,6 +1505,10 @@ static bool pl011_tx_chars(struct uart_a
|
||||
if (likely(from_irq) && count-- == 0)
|
||||
break;
|
||||
|
||||
|
@ -42,6 +40,3 @@ index 5e9a789e3c15..979fce6a05a7 100644
|
|||
if (!pl011_tx_char(uap, xmit->buf[xmit->tail], from_irq))
|
||||
break;
|
||||
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From a6e1d77c5279b86105db8c352208e20e3c1822b6 Mon Sep 17 00:00:00 2001
|
||||
From 356aa7855c69a31cd6a00cdaf4e27b80f7aa3a27 Mon Sep 17 00:00:00 2001
|
||||
From: notro <notro@tronnes.org>
|
||||
Date: Thu, 10 Jul 2014 13:59:47 +0200
|
||||
Subject: [PATCH 070/634] pinctrl-bcm2835: Set base to 0 give expected gpio
|
||||
Subject: [PATCH 062/828] pinctrl-bcm2835: Set base to 0 give expected gpio
|
||||
numbering
|
||||
|
||||
Signed-off-by: Noralf Tronnes <notro@tronnes.org>
|
||||
|
@ -18,11 +18,9 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
drivers/pinctrl/bcm/pinctrl-bcm2835.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
index 6e6fefeb21ea..7167927e9f26 100644
|
||||
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
|
||||
@@ -362,7 +362,7 @@ static const struct gpio_chip bcm2835_gpio_chip = {
|
||||
@@ -362,7 +362,7 @@ static const struct gpio_chip bcm2835_gp
|
||||
.get = bcm2835_gpio_get,
|
||||
.set = bcm2835_gpio_set,
|
||||
.set_config = gpiochip_generic_config,
|
||||
|
@ -31,7 +29,7 @@ index 6e6fefeb21ea..7167927e9f26 100644
|
|||
.ngpio = BCM2835_NUM_GPIOS,
|
||||
.can_sleep = false,
|
||||
};
|
||||
@@ -378,7 +378,7 @@ static const struct gpio_chip bcm2711_gpio_chip = {
|
||||
@@ -378,7 +378,7 @@ static const struct gpio_chip bcm2711_gp
|
||||
.get = bcm2835_gpio_get,
|
||||
.set = bcm2835_gpio_set,
|
||||
.set_config = gpiochip_generic_config,
|
||||
|
@ -40,6 +38,3 @@ index 6e6fefeb21ea..7167927e9f26 100644
|
|||
.ngpio = BCM2711_NUM_GPIOS,
|
||||
.can_sleep = false,
|
||||
};
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 404cf082aed147576fb07d389aa8f92d32fee9a5 Mon Sep 17 00:00:00 2001
|
||||
From 5016eb2f9089a8cd60716d796a4583f2919b957f Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Sun, 12 May 2013 12:24:19 +0100
|
||||
Subject: [PATCH 071/634] Main bcm2708/bcm2709 linux port
|
||||
Subject: [PATCH 063/828] Main bcm2708/bcm2709 linux port
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -32,8 +32,6 @@ board_bcm2835: Remove coherent dma pool increase - API has gone
|
|||
drivers/mailbox/bcm2835-mailbox.c | 18 ++++++++++++++++--
|
||||
4 files changed, 35 insertions(+), 6 deletions(-)
|
||||
|
||||
diff --git a/arch/arm/mach-bcm/Kconfig b/arch/arm/mach-bcm/Kconfig
|
||||
index 0462f870ab17..d802ded21ed6 100644
|
||||
--- a/arch/arm/mach-bcm/Kconfig
|
||||
+++ b/arch/arm/mach-bcm/Kconfig
|
||||
@@ -166,6 +166,7 @@ config ARCH_BCM2835
|
||||
|
@ -44,8 +42,6 @@ index 0462f870ab17..d802ded21ed6 100644
|
|||
help
|
||||
This enables support for the Broadcom BCM2711 and BCM283x SoCs.
|
||||
This SoC is used in the Raspberry Pi and Roku 2 devices.
|
||||
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S
|
||||
index a0618f3e6836..b3a2fce22eac 100644
|
||||
--- a/arch/arm/mm/proc-v6.S
|
||||
+++ b/arch/arm/mm/proc-v6.S
|
||||
@@ -70,10 +70,19 @@ ENDPROC(cpu_v6_reset)
|
||||
|
@ -71,8 +67,6 @@ index a0618f3e6836..b3a2fce22eac 100644
|
|||
ret lr
|
||||
|
||||
ENTRY(cpu_v6_dcache_clean_area)
|
||||
diff --git a/drivers/irqchip/irq-bcm2835.c b/drivers/irqchip/irq-bcm2835.c
|
||||
index e08c209521ac..4dbb4b16ee6e 100644
|
||||
--- a/drivers/irqchip/irq-bcm2835.c
|
||||
+++ b/drivers/irqchip/irq-bcm2835.c
|
||||
@@ -43,7 +43,9 @@
|
||||
|
@ -93,7 +87,7 @@ index e08c209521ac..4dbb4b16ee6e 100644
|
|||
#define FIQ_START (NR_IRQS_BANK0 + MAKE_HWIRQ(NR_BANKS - 1, 0))
|
||||
|
||||
static const int reg_pending[] __initconst = { 0x00, 0x04, 0x08 };
|
||||
@@ -253,10 +256,12 @@ static int __init armctrl_of_init(struct device_node *node,
|
||||
@@ -253,10 +256,12 @@ static int __init armctrl_of_init(struct
|
||||
MAKE_HWIRQ(b, i) + NUMBER_IRQS);
|
||||
BUG_ON(irq <= 0);
|
||||
irq_set_chip(irq, &armctrl_chip);
|
||||
|
@ -107,8 +101,6 @@ index e08c209521ac..4dbb4b16ee6e 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/mailbox/bcm2835-mailbox.c b/drivers/mailbox/bcm2835-mailbox.c
|
||||
index 86b7ce3549c5..f0c2ad3d59c9 100644
|
||||
--- a/drivers/mailbox/bcm2835-mailbox.c
|
||||
+++ b/drivers/mailbox/bcm2835-mailbox.c
|
||||
@@ -45,12 +45,15 @@
|
||||
|
@ -127,7 +119,7 @@ index 86b7ce3549c5..f0c2ad3d59c9 100644
|
|||
|
||||
struct bcm2835_mbox {
|
||||
void __iomem *regs;
|
||||
@@ -145,7 +148,7 @@ static int bcm2835_mbox_probe(struct platform_device *pdev)
|
||||
@@ -145,7 +148,7 @@ static int bcm2835_mbox_probe(struct pla
|
||||
return -ENOMEM;
|
||||
spin_lock_init(&mbox->lock);
|
||||
|
||||
|
@ -136,7 +128,7 @@ index 86b7ce3549c5..f0c2ad3d59c9 100644
|
|||
bcm2835_mbox_irq, 0, dev_name(dev), mbox);
|
||||
if (ret) {
|
||||
dev_err(dev, "Failed to register a mailbox IRQ handler: %d\n",
|
||||
@@ -194,7 +197,18 @@ static struct platform_driver bcm2835_mbox_driver = {
|
||||
@@ -194,7 +197,18 @@ static struct platform_driver bcm2835_mb
|
||||
},
|
||||
.probe = bcm2835_mbox_probe,
|
||||
};
|
||||
|
@ -156,6 +148,3 @@ index 86b7ce3549c5..f0c2ad3d59c9 100644
|
|||
|
||||
MODULE_AUTHOR("Lubomir Rintel <lkundrak@v3.sk>");
|
||||
MODULE_DESCRIPTION("BCM2835 mailbox IPC driver");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From bd92e5e89a295480cb49dbc7d145bcfb688c43d8 Mon Sep 17 00:00:00 2001
|
||||
From 1561c1c0488ca3d335b72a0b1f28f35f6cdf6664 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 1 May 2013 19:46:17 +0100
|
||||
Subject: [PATCH 072/634] Add dwc_otg driver
|
||||
Subject: [PATCH 064/828] Add dwc_otg driver
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -1062,11 +1062,9 @@ Signed-off-by: Jonathan Bell <jonathan@raspberrypi.org>
|
|||
create mode 100644 drivers/usb/host/dwc_otg/test/test_mod_param.pl
|
||||
create mode 100644 drivers/usb/host/dwc_otg/test/test_sysfs.pl
|
||||
|
||||
diff --git a/arch/arm/include/asm/irqflags.h b/arch/arm/include/asm/irqflags.h
|
||||
index aeec7f24eb75..a3b186608c60 100644
|
||||
--- a/arch/arm/include/asm/irqflags.h
|
||||
+++ b/arch/arm/include/asm/irqflags.h
|
||||
@@ -163,13 +163,23 @@ static inline unsigned long arch_local_save_flags(void)
|
||||
@@ -163,13 +163,23 @@ static inline unsigned long arch_local_s
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1093,8 +1091,6 @@ index aeec7f24eb75..a3b186608c60 100644
|
|||
:
|
||||
: "r" (flags)
|
||||
: "memory", "cc");
|
||||
diff --git a/arch/arm/kernel/fiqasm.S b/arch/arm/kernel/fiqasm.S
|
||||
index 8dd26e1a9bd6..eef484756af2 100644
|
||||
--- a/arch/arm/kernel/fiqasm.S
|
||||
+++ b/arch/arm/kernel/fiqasm.S
|
||||
@@ -47,3 +47,7 @@ ENTRY(__get_fiq_regs)
|
||||
|
@ -1105,8 +1101,6 @@ index 8dd26e1a9bd6..eef484756af2 100644
|
|||
+ENTRY(__FIQ_Branch)
|
||||
+ mov pc, r8
|
||||
+ENDPROC(__FIQ_Branch)
|
||||
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
|
||||
index 643edf5fe18c..0e6efcd960d0 100644
|
||||
--- a/drivers/usb/Makefile
|
||||
+++ b/drivers/usb/Makefile
|
||||
@@ -9,6 +9,7 @@ obj-$(CONFIG_USB_COMMON) += common/
|
||||
|
@ -1117,11 +1111,9 @@ index 643edf5fe18c..0e6efcd960d0 100644
|
|||
obj-$(CONFIG_USB_DWC3) += dwc3/
|
||||
obj-$(CONFIG_USB_DWC2) += dwc2/
|
||||
obj-$(CONFIG_USB_ISP1760) += isp1760/
|
||||
diff --git a/drivers/usb/core/generic.c b/drivers/usb/core/generic.c
|
||||
index 26f9fb9f67ca..fe8c7a85e141 100644
|
||||
--- a/drivers/usb/core/generic.c
|
||||
+++ b/drivers/usb/core/generic.c
|
||||
@@ -190,6 +190,7 @@ int usb_choose_configuration(struct usb_device *udev)
|
||||
@@ -190,6 +190,7 @@ int usb_choose_configuration(struct usb_
|
||||
dev_warn(&udev->dev,
|
||||
"no configuration chosen from %d choice%s\n",
|
||||
num_configs, plural(num_configs));
|
||||
|
@ -1129,11 +1121,9 @@ index 26f9fb9f67ca..fe8c7a85e141 100644
|
|||
}
|
||||
return i;
|
||||
}
|
||||
diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
|
||||
index 86658a81d284..1b85a0f17e06 100644
|
||||
--- a/drivers/usb/core/hub.c
|
||||
+++ b/drivers/usb/core/hub.c
|
||||
@@ -5570,7 +5570,7 @@ static void port_event(struct usb_hub *hub, int port1)
|
||||
@@ -5582,7 +5582,7 @@ static void port_event(struct usb_hub *h
|
||||
port_dev->over_current_count++;
|
||||
port_over_current_notify(port_dev);
|
||||
|
||||
|
@ -1142,11 +1132,9 @@ index 86658a81d284..1b85a0f17e06 100644
|
|||
port_dev->over_current_count);
|
||||
usb_clear_port_feature(hdev, port1,
|
||||
USB_PORT_FEAT_C_OVER_CURRENT);
|
||||
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
|
||||
index 4d59d927ae3e..7a32053e941f 100644
|
||||
--- a/drivers/usb/core/message.c
|
||||
+++ b/drivers/usb/core/message.c
|
||||
@@ -2140,6 +2140,85 @@ int usb_set_configuration(struct usb_device *dev, int configuration)
|
||||
@@ -2140,6 +2140,85 @@ free_interfaces:
|
||||
if (cp->string == NULL &&
|
||||
!(dev->quirks & USB_QUIRK_CONFIG_INTF_STRINGS))
|
||||
cp->string = usb_cache_string(dev, cp->desc.iConfiguration);
|
||||
|
@ -1232,8 +1220,6 @@ index 4d59d927ae3e..7a32053e941f 100644
|
|||
|
||||
/* Now that the interfaces are installed, re-enable LPM. */
|
||||
usb_unlocked_enable_lpm(dev);
|
||||
diff --git a/drivers/usb/core/otg_productlist.h b/drivers/usb/core/otg_productlist.h
|
||||
index db67df29fb2b..1839e169469b 100644
|
||||
--- a/drivers/usb/core/otg_productlist.h
|
||||
+++ b/drivers/usb/core/otg_productlist.h
|
||||
@@ -11,33 +11,82 @@
|
||||
|
@ -1325,7 +1311,7 @@ index db67df29fb2b..1839e169469b 100644
|
|||
static int is_targeted(struct usb_device *dev)
|
||||
{
|
||||
struct usb_device_id *id = productlist_table;
|
||||
@@ -87,16 +136,57 @@ static int is_targeted(struct usb_device *dev)
|
||||
@@ -87,16 +136,57 @@ static int is_targeted(struct usb_device
|
||||
continue;
|
||||
|
||||
return 1;
|
||||
|
@ -1348,15 +1334,11 @@ index db67df29fb2b..1839e169469b 100644
|
|||
+ if ((id->match_flags & USB_DEVICE_ID_MATCH_VENDOR) &&
|
||||
+ id->idVendor != le16_to_cpu(dev->descriptor.idVendor))
|
||||
+ continue;
|
||||
|
||||
+
|
||||
+ if ((id->match_flags & USB_DEVICE_ID_MATCH_PRODUCT) &&
|
||||
+ id->idProduct != le16_to_cpu(dev->descriptor.idProduct))
|
||||
+ continue;
|
||||
|
||||
- /* OTG MESSAGE: report errors here, customize to match your product */
|
||||
- dev_err(&dev->dev, "device v%04x p%04x is not supported\n",
|
||||
- le16_to_cpu(dev->descriptor.idVendor),
|
||||
- le16_to_cpu(dev->descriptor.idProduct));
|
||||
+
|
||||
+ /* No need to test id->bcdDevice_lo != 0, since 0 is never
|
||||
+ greater than any unsigned number. */
|
||||
+ if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_LO) &&
|
||||
|
@ -1378,20 +1360,21 @@ index db67df29fb2b..1839e169469b 100644
|
|||
+ if ((id->match_flags & USB_DEVICE_ID_MATCH_DEV_PROTOCOL) &&
|
||||
+ (id->bDeviceProtocol != dev->descriptor.bDeviceProtocol))
|
||||
+ continue;
|
||||
+
|
||||
|
||||
+ return 1;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
|
||||
- /* OTG MESSAGE: report errors here, customize to match your product */
|
||||
- dev_err(&dev->dev, "device v%04x p%04x is not supported\n",
|
||||
- le16_to_cpu(dev->descriptor.idVendor),
|
||||
- le16_to_cpu(dev->descriptor.idProduct));
|
||||
+ /* add other match criteria here ... */
|
||||
|
||||
+ report_errors(dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
diff --git a/drivers/usb/gadget/file_storage.c b/drivers/usb/gadget/file_storage.c
|
||||
new file mode 100644
|
||||
index 000000000000..a896d73f7a93
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/gadget/file_storage.c
|
||||
@@ -0,0 +1,3676 @@
|
||||
|
@ -5071,8 +5054,6 @@ index 000000000000..a896d73f7a93
|
|||
+ kref_put(&fsg->ref, fsg_release);
|
||||
+}
|
||||
+module_exit(fsg_cleanup);
|
||||
diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig
|
||||
index c4736d1d020c..b325ebb6b35c 100644
|
||||
--- a/drivers/usb/host/Kconfig
|
||||
+++ b/drivers/usb/host/Kconfig
|
||||
@@ -730,6 +730,16 @@ config USB_RENESAS_USBHS_HCD
|
||||
|
@ -5092,11 +5073,9 @@ index c4736d1d020c..b325ebb6b35c 100644
|
|||
config USB_HCD_BCMA
|
||||
tristate "BCMA usb host driver"
|
||||
depends on BCMA
|
||||
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
|
||||
index 171de4df50bd..073f31432690 100644
|
||||
--- a/drivers/usb/host/Makefile
|
||||
+++ b/drivers/usb/host/Makefile
|
||||
@@ -77,6 +77,7 @@ obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd.o
|
||||
@@ -77,6 +77,7 @@ obj-$(CONFIG_USB_SL811_HCD) += sl811-hcd
|
||||
obj-$(CONFIG_USB_SL811_CS) += sl811_cs.o
|
||||
obj-$(CONFIG_USB_U132_HCD) += u132-hcd.o
|
||||
obj-$(CONFIG_USB_R8A66597_HCD) += r8a66597-hcd.o
|
||||
|
@ -5104,9 +5083,6 @@ index 171de4df50bd..073f31432690 100644
|
|||
obj-$(CONFIG_USB_FSL_USB2) += fsl-mph-dr-of.o
|
||||
obj-$(CONFIG_USB_EHCI_FSL) += fsl-mph-dr-of.o
|
||||
obj-$(CONFIG_USB_EHCI_FSL) += ehci-fsl.o
|
||||
diff --git a/drivers/usb/host/dwc_common_port/Makefile b/drivers/usb/host/dwc_common_port/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..f10d466d1aea
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/Makefile
|
||||
@@ -0,0 +1,58 @@
|
||||
|
@ -5168,9 +5144,6 @@ index 000000000000..f10d466d1aea
|
|||
+
|
||||
+clean:
|
||||
+ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
|
||||
diff --git a/drivers/usb/host/dwc_common_port/Makefile.fbsd b/drivers/usb/host/dwc_common_port/Makefile.fbsd
|
||||
new file mode 100644
|
||||
index 000000000000..45db9915b9d3
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/Makefile.fbsd
|
||||
@@ -0,0 +1,17 @@
|
||||
|
@ -5191,9 +5164,6 @@ index 000000000000..45db9915b9d3
|
|||
+ dwc_common_fbsd.c dwc_mem.c
|
||||
+
|
||||
+.include <bsd.kmod.mk>
|
||||
diff --git a/drivers/usb/host/dwc_common_port/Makefile.linux b/drivers/usb/host/dwc_common_port/Makefile.linux
|
||||
new file mode 100644
|
||||
index 000000000000..0cef7b461bd5
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/Makefile.linux
|
||||
@@ -0,0 +1,49 @@
|
||||
|
@ -5246,9 +5216,6 @@ index 000000000000..0cef7b461bd5
|
|||
+
|
||||
+clean:
|
||||
+ rm -rf *.o *.ko .*.cmd *.mod.c .*.o.d .*.o.tmp modules.order Module.markers Module.symvers .tmp_versions/
|
||||
diff --git a/drivers/usb/host/dwc_common_port/changes.txt b/drivers/usb/host/dwc_common_port/changes.txt
|
||||
new file mode 100644
|
||||
index 000000000000..f6839f92c276
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/changes.txt
|
||||
@@ -0,0 +1,174 @@
|
||||
|
@ -5426,9 +5393,6 @@ index 000000000000..f6839f92c276
|
|||
+A DWC_LIBMODULE #define has also been added. If this is not defined, then the
|
||||
+module code in dwc_common_linux.c is not compiled in. This allows linking the
|
||||
+library code directly into a driver module, instead of as a standalone module.
|
||||
diff --git a/drivers/usb/host/dwc_common_port/doc/doxygen.cfg b/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
|
||||
new file mode 100644
|
||||
index 000000000000..89aa887af29d
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/doc/doxygen.cfg
|
||||
@@ -0,0 +1,270 @@
|
||||
|
@ -5702,9 +5666,6 @@ index 000000000000..89aa887af29d
|
|||
+# Configuration::additions related to the search engine
|
||||
+#---------------------------------------------------------------------------
|
||||
+SEARCHENGINE = NO
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_cc.c b/drivers/usb/host/dwc_common_port/dwc_cc.c
|
||||
new file mode 100644
|
||||
index 000000000000..5ec2ae28698c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_cc.c
|
||||
@@ -0,0 +1,532 @@
|
||||
|
@ -6240,9 +6201,6 @@ index 000000000000..5ec2ae28698c
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_CCLIB */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_cc.h b/drivers/usb/host/dwc_common_port/dwc_cc.h
|
||||
new file mode 100644
|
||||
index 000000000000..f86e6f21792b
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_cc.h
|
||||
@@ -0,0 +1,224 @@
|
||||
|
@ -6470,9 +6428,6 @@ index 000000000000..f86e6f21792b
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _DWC_CC_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c b/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c
|
||||
new file mode 100644
|
||||
index 000000000000..6dd04b58f8f6
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_common_fbsd.c
|
||||
@@ -0,0 +1,1308 @@
|
||||
|
@ -7784,9 +7739,6 @@ index 000000000000..6dd04b58f8f6
|
|||
+{
|
||||
+ return wq->pending;
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_common_linux.c b/drivers/usb/host/dwc_common_port/dwc_common_linux.c
|
||||
new file mode 100644
|
||||
index 000000000000..1460afaf997d
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_common_linux.c
|
||||
@@ -0,0 +1,1409 @@
|
||||
|
@ -9199,9 +9151,6 @@ index 000000000000..1460afaf997d
|
|||
+MODULE_LICENSE ("GPL");
|
||||
+
|
||||
+#endif /* DWC_LIBMODULE */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c b/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c
|
||||
new file mode 100644
|
||||
index 000000000000..49b07e172264
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_common_nbsd.c
|
||||
@@ -0,0 +1,1275 @@
|
||||
|
@ -10480,9 +10429,6 @@ index 000000000000..49b07e172264
|
|||
+{
|
||||
+ return wq->pending;
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_crypto.c b/drivers/usb/host/dwc_common_port/dwc_crypto.c
|
||||
new file mode 100644
|
||||
index 000000000000..3b0353296148
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_crypto.c
|
||||
@@ -0,0 +1,308 @@
|
||||
|
@ -10794,9 +10740,6 @@ index 000000000000..3b0353296148
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_CRYPTOLIB */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_crypto.h b/drivers/usb/host/dwc_common_port/dwc_crypto.h
|
||||
new file mode 100644
|
||||
index 000000000000..26fcddcfe9ba
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_crypto.h
|
||||
@@ -0,0 +1,111 @@
|
||||
|
@ -10911,9 +10854,6 @@ index 000000000000..26fcddcfe9ba
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _DWC_CRYPTO_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_dh.c b/drivers/usb/host/dwc_common_port/dwc_dh.c
|
||||
new file mode 100644
|
||||
index 000000000000..2b429a32aaf0
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_dh.c
|
||||
@@ -0,0 +1,291 @@
|
||||
|
@ -11208,9 +11148,6 @@ index 000000000000..2b429a32aaf0
|
|||
+#endif /* !CONFIG_MACH_IPMATE */
|
||||
+
|
||||
+#endif /* DWC_CRYPTOLIB */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_dh.h b/drivers/usb/host/dwc_common_port/dwc_dh.h
|
||||
new file mode 100644
|
||||
index 000000000000..25c1cc0d588a
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_dh.h
|
||||
@@ -0,0 +1,106 @@
|
||||
|
@ -11320,9 +11257,6 @@ index 000000000000..25c1cc0d588a
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _DWC_DH_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_list.h b/drivers/usb/host/dwc_common_port/dwc_list.h
|
||||
new file mode 100644
|
||||
index 000000000000..4ce560df0cae
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_list.h
|
||||
@@ -0,0 +1,594 @@
|
||||
|
@ -11920,9 +11854,6 @@ index 000000000000..4ce560df0cae
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _DWC_LIST_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_mem.c b/drivers/usb/host/dwc_common_port/dwc_mem.c
|
||||
new file mode 100644
|
||||
index 000000000000..ad645ff1ba7e
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_mem.c
|
||||
@@ -0,0 +1,245 @@
|
||||
|
@ -12171,9 +12102,6 @@ index 000000000000..ad645ff1ba7e
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_DEBUG_MEMORY */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_modpow.c b/drivers/usb/host/dwc_common_port/dwc_modpow.c
|
||||
new file mode 100644
|
||||
index 000000000000..20045381208a
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_modpow.c
|
||||
@@ -0,0 +1,636 @@
|
||||
|
@ -12813,9 +12741,6 @@ index 000000000000..20045381208a
|
|||
+#endif /* CONFIG_MACH_IPMATE */
|
||||
+
|
||||
+#endif /*DWC_CRYPTOLIB */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_modpow.h b/drivers/usb/host/dwc_common_port/dwc_modpow.h
|
||||
new file mode 100644
|
||||
index 000000000000..64f00c276e71
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_modpow.h
|
||||
@@ -0,0 +1,34 @@
|
||||
|
@ -12853,9 +12778,6 @@ index 000000000000..64f00c276e71
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _LINUX_BIGNUM_H */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_notifier.c b/drivers/usb/host/dwc_common_port/dwc_notifier.c
|
||||
new file mode 100644
|
||||
index 000000000000..8b3772afe11d
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_notifier.c
|
||||
@@ -0,0 +1,319 @@
|
||||
|
@ -13178,9 +13100,6 @@ index 000000000000..8b3772afe11d
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_NOTIFYLIB */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_notifier.h b/drivers/usb/host/dwc_common_port/dwc_notifier.h
|
||||
new file mode 100644
|
||||
index 000000000000..4a8cdfe565b1
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_notifier.h
|
||||
@@ -0,0 +1,122 @@
|
||||
|
@ -13306,9 +13225,6 @@ index 000000000000..4a8cdfe565b1
|
|||
+#endif
|
||||
+
|
||||
+#endif /* __DWC_NOTIFIER_H__ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/dwc_os.h b/drivers/usb/host/dwc_common_port/dwc_os.h
|
||||
new file mode 100644
|
||||
index 000000000000..9a86d299403b
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/dwc_os.h
|
||||
@@ -0,0 +1,1276 @@
|
||||
|
@ -14588,9 +14504,6 @@ index 000000000000..9a86d299403b
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _DWC_OS_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_common_port/usb.h b/drivers/usb/host/dwc_common_port/usb.h
|
||||
new file mode 100644
|
||||
index 000000000000..27bda82dac2e
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_common_port/usb.h
|
||||
@@ -0,0 +1,946 @@
|
||||
|
@ -15540,9 +15453,6 @@ index 000000000000..27bda82dac2e
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _USB_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_otg/Makefile b/drivers/usb/host/dwc_otg/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..7ea65a6bcdb7
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/Makefile
|
||||
@@ -0,0 +1,85 @@
|
||||
|
@ -15631,9 +15541,6 @@ index 000000000000..7ea65a6bcdb7
|
|||
+ rm -rf *.o *.ko .*cmd *.mod.c .tmp_versions Module.symvers
|
||||
+
|
||||
+endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/doc/doxygen.cfg b/drivers/usb/host/dwc_otg/doc/doxygen.cfg
|
||||
new file mode 100644
|
||||
index 000000000000..712b057ef7c2
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/doc/doxygen.cfg
|
||||
@@ -0,0 +1,224 @@
|
||||
|
@ -15861,9 +15768,6 @@ index 000000000000..712b057ef7c2
|
|||
+# Configuration::additions related to the search engine
|
||||
+#---------------------------------------------------------------------------
|
||||
+SEARCHENGINE = NO
|
||||
diff --git a/drivers/usb/host/dwc_otg/dummy_audio.c b/drivers/usb/host/dwc_otg/dummy_audio.c
|
||||
new file mode 100644
|
||||
index 000000000000..f827102fa644
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dummy_audio.c
|
||||
@@ -0,0 +1,1574 @@
|
||||
|
@ -17441,9 +17345,6 @@ index 000000000000..f827102fa644
|
|||
+ remove_proc_entry("isoc_test", NULL);
|
||||
+}
|
||||
+module_exit (cleanup);
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_cfi_common.h b/drivers/usb/host/dwc_otg/dwc_cfi_common.h
|
||||
new file mode 100644
|
||||
index 000000000000..7770e201ad3b
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_cfi_common.h
|
||||
@@ -0,0 +1,142 @@
|
||||
|
@ -17589,9 +17490,6 @@ index 000000000000..7770e201ad3b
|
|||
+typedef struct cfi_string cfi_string_t;
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_adp.c b/drivers/usb/host/dwc_otg/dwc_otg_adp.c
|
||||
new file mode 100644
|
||||
index 000000000000..ce0618dd3f4a
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_adp.c
|
||||
@@ -0,0 +1,854 @@
|
||||
|
@ -18449,9 +18347,6 @@ index 000000000000..ce0618dd3f4a
|
|||
+#endif
|
||||
+ return 1;
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_adp.h b/drivers/usb/host/dwc_otg/dwc_otg_adp.h
|
||||
new file mode 100644
|
||||
index 000000000000..4110b25d2002
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_adp.h
|
||||
@@ -0,0 +1,80 @@
|
||||
|
@ -18535,9 +18430,6 @@ index 000000000000..4110b25d2002
|
|||
+extern int32_t dwc_otg_adp_handle_srp_intr(dwc_otg_core_if_t * core_if);
|
||||
+
|
||||
+#endif //__DWC_OTG_ADP_H__
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_attr.c b/drivers/usb/host/dwc_otg/dwc_otg_attr.c
|
||||
new file mode 100644
|
||||
index 000000000000..2f8ea77c3892
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_attr.c
|
||||
@@ -0,0 +1,1212 @@
|
||||
|
@ -19753,9 +19645,6 @@ index 000000000000..2f8ea77c3892
|
|||
+ device_remove_file(&dev->dev, &dev_attr_sleep_status);
|
||||
+#endif
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_attr.h b/drivers/usb/host/dwc_otg/dwc_otg_attr.h
|
||||
new file mode 100644
|
||||
index 000000000000..e10b67f97c52
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_attr.h
|
||||
@@ -0,0 +1,89 @@
|
||||
|
@ -19848,9 +19737,6 @@ index 000000000000..e10b67f97c52
|
|||
+#endif
|
||||
+ );
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_cfi.c b/drivers/usb/host/dwc_otg/dwc_otg_cfi.c
|
||||
new file mode 100644
|
||||
index 000000000000..bbb3d32093d0
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_cfi.c
|
||||
@@ -0,0 +1,1876 @@
|
||||
|
@ -21730,9 +21616,6 @@ index 000000000000..bbb3d32093d0
|
|||
+}
|
||||
+
|
||||
+#endif //DWC_UTE_CFI
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_cfi.h b/drivers/usb/host/dwc_otg/dwc_otg_cfi.h
|
||||
new file mode 100644
|
||||
index 000000000000..55fd337a283c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_cfi.h
|
||||
@@ -0,0 +1,320 @@
|
||||
|
@ -22056,9 +21939,6 @@ index 000000000000..55fd337a283c
|
|||
+int cfi_setup(struct dwc_otg_pcd *pcd, struct cfi_usb_ctrlrequest *ctrl);
|
||||
+
|
||||
+#endif /* (__DWC_OTG_CFI_H__) */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_cil.c b/drivers/usb/host/dwc_otg/dwc_otg_cil.c
|
||||
new file mode 100644
|
||||
index 000000000000..14300ad0f2af
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_cil.c
|
||||
@@ -0,0 +1,7146 @@
|
||||
|
@ -29208,9 +29088,6 @@ index 000000000000..14300ad0f2af
|
|||
+ dwc_otg_pcd_start_srp_timer(core_if);
|
||||
+ return;
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_cil.h b/drivers/usb/host/dwc_otg/dwc_otg_cil.h
|
||||
new file mode 100644
|
||||
index 000000000000..79dbf8374f02
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_cil.h
|
||||
@@ -0,0 +1,1464 @@
|
||||
|
@ -30678,9 +30555,6 @@ index 000000000000..79dbf8374f02
|
|||
+//////////////////////////////////////////////////////////////////////
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c
|
||||
new file mode 100644
|
||||
index 000000000000..799ab14b9eda
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_cil_intr.c
|
||||
@@ -0,0 +1,1601 @@
|
||||
|
@ -32285,9 +32159,6 @@ index 000000000000..799ab14b9eda
|
|||
+ DWC_SPINUNLOCK(core_if->lock);
|
||||
+ return retval;
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_core_if.h b/drivers/usb/host/dwc_otg/dwc_otg_core_if.h
|
||||
new file mode 100644
|
||||
index 000000000000..4138fd173337
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_core_if.h
|
||||
@@ -0,0 +1,705 @@
|
||||
|
@ -32996,9 +32867,6 @@ index 000000000000..4138fd173337
|
|||
+/** @} */
|
||||
+
|
||||
+#endif /* __DWC_CORE_IF_H__ */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_dbg.h b/drivers/usb/host/dwc_otg/dwc_otg_dbg.h
|
||||
new file mode 100644
|
||||
index 000000000000..ccc24e010e44
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_dbg.h
|
||||
@@ -0,0 +1,117 @@
|
||||
|
@ -33119,9 +32987,6 @@ index 000000000000..ccc24e010e44
|
|||
+
|
||||
+#endif /*DEBUG*/
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.c b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
|
||||
new file mode 100644
|
||||
index 000000000000..cb576e553d76
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.c
|
||||
@@ -0,0 +1,1772 @@
|
||||
|
@ -34897,9 +34762,6 @@ index 000000000000..cb576e553d76
|
|||
+ </td></tr>
|
||||
+
|
||||
+*/
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_driver.h b/drivers/usb/host/dwc_otg/dwc_otg_driver.h
|
||||
new file mode 100644
|
||||
index 000000000000..6a8be63a0ab2
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_driver.h
|
||||
@@ -0,0 +1,86 @@
|
||||
|
@ -34989,9 +34851,6 @@ index 000000000000..6a8be63a0ab2
|
|||
+#endif
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c
|
||||
new file mode 100644
|
||||
index 000000000000..490a7801e737
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.c
|
||||
@@ -0,0 +1,1431 @@
|
||||
|
@ -36426,9 +36285,6 @@ index 000000000000..490a7801e737
|
|||
+ mb();
|
||||
+ fiq_fsm_spin_unlock(&state->lock);
|
||||
+}
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h
|
||||
new file mode 100644
|
||||
index 000000000000..537cc237b4bc
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_fiq_fsm.h
|
||||
@@ -0,0 +1,399 @@
|
||||
|
@ -36831,9 +36687,6 @@ index 000000000000..537cc237b4bc
|
|||
+extern void dwc_otg_fiq_nop(struct fiq_state *state);
|
||||
+
|
||||
+#endif /* DWC_OTG_FIQ_FSM_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S b/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S
|
||||
new file mode 100644
|
||||
index 000000000000..ffa8d21bc61e
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_fiq_stub.S
|
||||
@@ -0,0 +1,80 @@
|
||||
|
@ -36917,9 +36770,6 @@ index 000000000000..ffa8d21bc61e
|
|||
+ subs pc, lr, #4;
|
||||
+_dwc_otg_fiq_stub_end:
|
||||
+END(_dwc_otg_fiq_stub)
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
|
||||
new file mode 100644
|
||||
index 000000000000..0f6645e2383c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.c
|
||||
@@ -0,0 +1,4356 @@
|
||||
|
@ -41279,9 +41129,6 @@ index 000000000000..0f6645e2383c
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd.h b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
|
||||
new file mode 100644
|
||||
index 000000000000..5ed8dccf0395
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd.h
|
||||
@@ -0,0 +1,870 @@
|
||||
|
@ -42155,9 +42002,6 @@ index 000000000000..5ed8dccf0395
|
|||
+#endif
|
||||
+#endif
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
|
||||
new file mode 100644
|
||||
index 000000000000..bd8a20403713
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_ddma.c
|
||||
@@ -0,0 +1,1134 @@
|
||||
|
@ -43295,9 +43139,6 @@ index 000000000000..bd8a20403713
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h b/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h
|
||||
new file mode 100644
|
||||
index 000000000000..a384db5e7ac2
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_if.h
|
||||
@@ -0,0 +1,421 @@
|
||||
|
@ -43722,9 +43563,6 @@ index 000000000000..a384db5e7ac2
|
|||
+
|
||||
+#endif /* __DWC_HCD_IF_H__ */
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
|
||||
new file mode 100644
|
||||
index 000000000000..d3097ef3728c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_intr.c
|
||||
@@ -0,0 +1,2757 @@
|
||||
|
@ -46485,9 +46323,6 @@ index 000000000000..d3097ef3728c
|
|||
+ return retval;
|
||||
+}
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
|
||||
new file mode 100644
|
||||
index 000000000000..eda7a33908b3
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_linux.c
|
||||
@@ -0,0 +1,1086 @@
|
||||
|
@ -47577,9 +47412,6 @@ index 000000000000..eda7a33908b3
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
|
||||
new file mode 100644
|
||||
index 000000000000..2823dc9af63f
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_hcd_queue.c
|
||||
@@ -0,0 +1,970 @@
|
||||
|
@ -48553,9 +48385,6 @@ index 000000000000..2823dc9af63f
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_DEVICE_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h b/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h
|
||||
new file mode 100644
|
||||
index 000000000000..7a77977c9ddf
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_os_dep.h
|
||||
@@ -0,0 +1,200 @@
|
||||
|
@ -48759,9 +48588,6 @@ index 000000000000..7a77977c9ddf
|
|||
+
|
||||
+
|
||||
+#endif /* _DWC_OS_DEP_H_ */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd.c
|
||||
new file mode 100644
|
||||
index 000000000000..9dabbe5c9791
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd.c
|
||||
@@ -0,0 +1,2725 @@
|
||||
|
@ -51490,9 +51316,6 @@ index 000000000000..9dabbe5c9791
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_HOST_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd.h b/drivers/usb/host/dwc_otg/dwc_otg_pcd.h
|
||||
new file mode 100644
|
||||
index 000000000000..a70ebd049d2c
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd.h
|
||||
@@ -0,0 +1,273 @@
|
||||
|
@ -51769,9 +51592,6 @@ index 000000000000..a70ebd049d2c
|
|||
+extern void do_test_mode(void *data);
|
||||
+#endif
|
||||
+#endif /* DWC_HOST_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h b/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h
|
||||
new file mode 100644
|
||||
index 000000000000..4c1d591fbc09
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_if.h
|
||||
@@ -0,0 +1,361 @@
|
||||
|
@ -52136,9 +51956,6 @@ index 000000000000..4c1d591fbc09
|
|||
+#endif /* __DWC_PCD_IF_H__ */
|
||||
+
|
||||
+#endif /* DWC_HOST_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c
|
||||
new file mode 100644
|
||||
index 000000000000..e55ea9c74be4
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_intr.c
|
||||
@@ -0,0 +1,5148 @@
|
||||
|
@ -57290,9 +57107,6 @@ index 000000000000..e55ea9c74be4
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_HOST_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c
|
||||
new file mode 100644
|
||||
index 000000000000..a5ed8e83711d
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_pcd_linux.c
|
||||
@@ -0,0 +1,1262 @@
|
||||
|
@ -58558,9 +58372,6 @@ index 000000000000..a5ed8e83711d
|
|||
+}
|
||||
+
|
||||
+#endif /* DWC_HOST_ONLY */
|
||||
diff --git a/drivers/usb/host/dwc_otg/dwc_otg_regs.h b/drivers/usb/host/dwc_otg/dwc_otg_regs.h
|
||||
new file mode 100644
|
||||
index 000000000000..8e0e7b569f1a
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/dwc_otg_regs.h
|
||||
@@ -0,0 +1,2550 @@
|
||||
|
@ -61114,9 +60925,6 @@ index 000000000000..8e0e7b569f1a
|
|||
+} gpwrdn_data_t;
|
||||
+
|
||||
+#endif
|
||||
diff --git a/drivers/usb/host/dwc_otg/test/Makefile b/drivers/usb/host/dwc_otg/test/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..fc453759dea3
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/test/Makefile
|
||||
@@ -0,0 +1,16 @@
|
||||
|
@ -61136,9 +60944,6 @@ index 000000000000..fc453759dea3
|
|||
+ else echo "=======> $$test, FAILED" ; \
|
||||
+ fi \
|
||||
+ done
|
||||
diff --git a/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm b/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm
|
||||
new file mode 100644
|
||||
index 000000000000..85e55fd6ddbc
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/test/dwc_otg_test.pm
|
||||
@@ -0,0 +1,337 @@
|
||||
|
@ -61479,9 +61284,6 @@ index 000000000000..85e55fd6ddbc
|
|||
+);
|
||||
+
|
||||
+1;
|
||||
diff --git a/drivers/usb/host/dwc_otg/test/test_mod_param.pl b/drivers/usb/host/dwc_otg/test/test_mod_param.pl
|
||||
new file mode 100644
|
||||
index 000000000000..dc3820df577b
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/test/test_mod_param.pl
|
||||
@@ -0,0 +1,133 @@
|
||||
|
@ -61618,9 +61420,6 @@ index 000000000000..dc3820df577b
|
|||
+
|
||||
+test_main();
|
||||
+0;
|
||||
diff --git a/drivers/usb/host/dwc_otg/test/test_sysfs.pl b/drivers/usb/host/dwc_otg/test/test_sysfs.pl
|
||||
new file mode 100644
|
||||
index 000000000000..cdc9963176e5
|
||||
--- /dev/null
|
||||
+++ b/drivers/usb/host/dwc_otg/test/test_sysfs.pl
|
||||
@@ -0,0 +1,193 @@
|
||||
|
@ -61817,6 +61616,3 @@ index 000000000000..cdc9963176e5
|
|||
+
|
||||
+test_main();
|
||||
+0;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 8b91cd2beb500674c49d6ebbb6aaabbbed26df83 Mon Sep 17 00:00:00 2001
|
||||
From 572e8ac98cf145a20bed39029726d3dcd1f1fa8e Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 17 Jun 2015 17:06:34 +0100
|
||||
Subject: [PATCH 073/634] bcm2708 framebuffer driver
|
||||
Subject: [PATCH 065/828] bcm2708 framebuffer driver
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -103,8 +103,6 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||
5 files changed, 1817 insertions(+), 1602 deletions(-)
|
||||
create mode 100644 drivers/video/fbdev/bcm2708_fb.c
|
||||
|
||||
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
|
||||
index 6ed5e608dd04..0b409636ebcd 100644
|
||||
--- a/drivers/video/fbdev/Kconfig
|
||||
+++ b/drivers/video/fbdev/Kconfig
|
||||
@@ -219,6 +219,20 @@ config FB_TILEBLITTING
|
||||
|
@ -128,11 +126,9 @@ index 6ed5e608dd04..0b409636ebcd 100644
|
|||
config FB_GRVGA
|
||||
tristate "Aeroflex Gaisler framebuffer support"
|
||||
depends on FB && SPARC
|
||||
diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile
|
||||
index 477b9624b703..36624ffdf2bc 100644
|
||||
--- a/drivers/video/fbdev/Makefile
|
||||
+++ b/drivers/video/fbdev/Makefile
|
||||
@@ -11,6 +11,7 @@ obj-$(CONFIG_FB_MACMODES) += macmodes.o
|
||||
@@ -11,6 +11,7 @@ obj-$(CONFIG_FB_MACMODES) += macmod
|
||||
obj-$(CONFIG_FB_WMT_GE_ROPS) += wmt_ge_rops.o
|
||||
|
||||
# Hardware specific drivers go first
|
||||
|
@ -140,9 +136,6 @@ index 477b9624b703..36624ffdf2bc 100644
|
|||
obj-$(CONFIG_FB_AMIGA) += amifb.o c2p_planar.o
|
||||
obj-$(CONFIG_FB_ARC) += arcfb.o
|
||||
obj-$(CONFIG_FB_CLPS711X) += clps711x-fb.o
|
||||
diff --git a/drivers/video/fbdev/bcm2708_fb.c b/drivers/video/fbdev/bcm2708_fb.c
|
||||
new file mode 100644
|
||||
index 000000000000..831e9a7b6818
|
||||
--- /dev/null
|
||||
+++ b/drivers/video/fbdev/bcm2708_fb.c
|
||||
@@ -0,0 +1,920 @@
|
||||
|
@ -1066,8 +1059,6 @@ index 000000000000..831e9a7b6818
|
|||
+MODULE_PARM_DESC(fbheight, "Height of ARM Framebuffer");
|
||||
+MODULE_PARM_DESC(fbdepth, "Bit depth of ARM Framebuffer");
|
||||
+MODULE_PARM_DESC(fbswap, "Swap order of red and blue in 24 and 32 bit modes");
|
||||
diff --git a/drivers/video/logo/logo_linux_clut224.ppm b/drivers/video/logo/logo_linux_clut224.ppm
|
||||
index 3c14e43b82fe..7626beb6a5bb 100644
|
||||
--- a/drivers/video/logo/logo_linux_clut224.ppm
|
||||
+++ b/drivers/video/logo/logo_linux_clut224.ppm
|
||||
@@ -1,1604 +1,883 @@
|
||||
|
@ -3556,11 +3547,9 @@ index 3c14e43b82fe..7626beb6a5bb 100644
|
|||
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
+0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
|
||||
+0 0 0 0 0 0 0 0 0
|
||||
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
index 73ad784fca96..40b8a32fced0 100644
|
||||
--- a/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
@@ -121,6 +121,7 @@ enum rpi_firmware_property_tag {
|
||||
@@ -122,6 +122,7 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_DEPTH = 0x00048005,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_PIXEL_ORDER = 0x00048006,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_ALPHA_MODE = 0x00048007,
|
||||
|
@ -3568,6 +3557,3 @@ index 73ad784fca96..40b8a32fced0 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 441052f1c98dde7ca5b6500e41e4b844ff6f9c5e Mon Sep 17 00:00:00 2001
|
||||
From 206c0a8b1c1cbe40982d385fc4b9382fe80fc918 Mon Sep 17 00:00:00 2001
|
||||
From: James Hughes <james.hughes@raspberrypi.org>
|
||||
Date: Thu, 14 Mar 2019 13:27:54 +0000
|
||||
Subject: [PATCH 074/634] Pulled in the multi frame buffer support from the Pi3
|
||||
Subject: [PATCH 066/828] Pulled in the multi frame buffer support from the Pi3
|
||||
repo
|
||||
|
||||
---
|
||||
|
@ -9,8 +9,6 @@ Subject: [PATCH 074/634] Pulled in the multi frame buffer support from the Pi3
|
|||
include/soc/bcm2835/raspberrypi-firmware.h | 13 +
|
||||
2 files changed, 337 insertions(+), 133 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/bcm2708_fb.c b/drivers/video/fbdev/bcm2708_fb.c
|
||||
index 831e9a7b6818..f66957d48dc3 100644
|
||||
--- a/drivers/video/fbdev/bcm2708_fb.c
|
||||
+++ b/drivers/video/fbdev/bcm2708_fb.c
|
||||
@@ -2,6 +2,7 @@
|
||||
|
@ -135,8 +133,9 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
- },
|
||||
+ {"dma_copies", offsetof(struct bcm2708_fb_stats, dma_copies)},
|
||||
+ {"dma_irqs", offsetof(struct bcm2708_fb_stats, dma_irqs)},
|
||||
+ };
|
||||
+
|
||||
};
|
||||
|
||||
- fb->debugfs_dir = debugfs_create_dir(DRIVER_NAME, NULL);
|
||||
+ static struct debugfs_reg32 screeninfo[] = {
|
||||
+ {"width", offsetof(struct fb_var_screeninfo, xres)},
|
||||
+ {"height", offsetof(struct fb_var_screeninfo, yres)},
|
||||
|
@ -145,9 +144,8 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
+ {"yres_virtual", offsetof(struct fb_var_screeninfo, yres_virtual)},
|
||||
+ {"xoffset", offsetof(struct fb_var_screeninfo, xoffset)},
|
||||
+ {"yoffset", offsetof(struct fb_var_screeninfo, yoffset)},
|
||||
};
|
||||
|
||||
- fb->debugfs_dir = debugfs_create_dir(DRIVER_NAME, NULL);
|
||||
+ };
|
||||
+
|
||||
+ fb->debugfs_dir = debugfs_lookup(DRIVER_NAME, NULL);
|
||||
+
|
||||
+ if (!fb->debugfs_dir)
|
||||
|
@ -213,7 +211,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
static int bcm2708_fb_set_bitfields(struct fb_var_screeninfo *var)
|
||||
{
|
||||
int ret = 0;
|
||||
@@ -214,11 +303,11 @@ static int bcm2708_fb_check_var(struct fb_var_screeninfo *var,
|
||||
@@ -214,11 +303,11 @@ static int bcm2708_fb_check_var(struct f
|
||||
struct fb_info *info)
|
||||
{
|
||||
/* info input, var output */
|
||||
|
@ -228,7 +226,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
var->yres, var->xres_virtual, var->yres_virtual,
|
||||
var->bits_per_pixel);
|
||||
|
||||
@@ -281,17 +370,24 @@ static int bcm2708_fb_set_par(struct fb_info *info)
|
||||
@@ -281,17 +370,24 @@ static int bcm2708_fb_set_par(struct fb_
|
||||
};
|
||||
int ret, image_size;
|
||||
|
||||
|
@ -257,7 +255,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
(image_size != fb->image_size || !fb->dma_addr)) {
|
||||
if (fb->dma_addr) {
|
||||
dma_free_coherent(info->device, fb->image_size,
|
||||
@@ -306,7 +402,7 @@ static int bcm2708_fb_set_par(struct fb_info *info)
|
||||
@@ -306,7 +402,7 @@ static int bcm2708_fb_set_par(struct fb_
|
||||
|
||||
if (!fb->cpuaddr) {
|
||||
fb->dma_addr = 0;
|
||||
|
@ -266,7 +264,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
} else {
|
||||
fb->image_size = image_size;
|
||||
}
|
||||
@@ -317,7 +413,7 @@ static int bcm2708_fb_set_par(struct fb_info *info)
|
||||
@@ -317,7 +413,7 @@ static int bcm2708_fb_set_par(struct fb_
|
||||
fbinfo.screen_size = image_size;
|
||||
fbinfo.pitch = (info->var.xres * info->var.bits_per_pixel) >> 3;
|
||||
|
||||
|
@ -275,7 +273,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
sizeof(fbinfo));
|
||||
if (ret || fbinfo.base != fb->dma_addr) {
|
||||
/* Firmware either failed, or assigned a different base
|
||||
@@ -330,7 +426,7 @@ static int bcm2708_fb_set_par(struct fb_info *info)
|
||||
@@ -330,7 +426,7 @@ static int bcm2708_fb_set_par(struct fb_
|
||||
fb->image_size = 0;
|
||||
fb->cpuaddr = NULL;
|
||||
fb->dma_addr = 0;
|
||||
|
@ -284,7 +282,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
}
|
||||
} else {
|
||||
/* Our allocation failed - drop into the old scheme of
|
||||
@@ -349,7 +445,7 @@ static int bcm2708_fb_set_par(struct fb_info *info)
|
||||
@@ -349,7 +445,7 @@ static int bcm2708_fb_set_par(struct fb_
|
||||
fbinfo.tag6.tag = RPI_FIRMWARE_FRAMEBUFFER_GET_PITCH;
|
||||
fbinfo.pitch = 0;
|
||||
|
||||
|
@ -293,7 +291,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
sizeof(fbinfo));
|
||||
if (ret) {
|
||||
dev_err(info->device,
|
||||
@@ -439,7 +535,10 @@ static int bcm2708_fb_setcolreg(unsigned int regno, unsigned int red,
|
||||
@@ -439,7 +535,10 @@ static int bcm2708_fb_setcolreg(unsigned
|
||||
packet->length = regno + 1;
|
||||
memcpy(packet->cmap, fb->gpu_cmap,
|
||||
sizeof(packet->cmap));
|
||||
|
@ -305,7 +303,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE,
|
||||
packet,
|
||||
(2 + packet->length) * sizeof(u32));
|
||||
@@ -478,8 +577,11 @@ static int bcm2708_fb_blank(int blank_mode, struct fb_info *info)
|
||||
@@ -478,8 +577,11 @@ static int bcm2708_fb_blank(int blank_mo
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -318,7 +316,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
if (ret)
|
||||
dev_err(info->device, "%s(%d) failed: %d\n", __func__,
|
||||
blank_mode, ret);
|
||||
@@ -496,12 +598,14 @@ static int bcm2708_fb_pan_display(struct fb_var_screeninfo *var,
|
||||
@@ -496,12 +598,14 @@ static int bcm2708_fb_pan_display(struct
|
||||
info->var.yoffset = var->yoffset;
|
||||
result = bcm2708_fb_set_par(info);
|
||||
if (result != 0)
|
||||
|
@ -334,7 +332,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
{
|
||||
struct bcm2708_fb *fb = to_bcm2708(info);
|
||||
u32 dummy = 0;
|
||||
@@ -509,7 +613,9 @@ static int bcm2708_ioctl(struct fb_info *info, unsigned int cmd, unsigned long a
|
||||
@@ -509,7 +613,9 @@ static int bcm2708_ioctl(struct fb_info
|
||||
|
||||
switch (cmd) {
|
||||
case FBIO_WAITFORVSYNC:
|
||||
|
@ -345,7 +343,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC,
|
||||
&dummy, sizeof(dummy));
|
||||
break;
|
||||
@@ -526,23 +632,22 @@ static int bcm2708_ioctl(struct fb_info *info, unsigned int cmd, unsigned long a
|
||||
@@ -526,23 +632,22 @@ static int bcm2708_ioctl(struct fb_info
|
||||
static void bcm2708_fb_fillrect(struct fb_info *info,
|
||||
const struct fb_fillrect *rect)
|
||||
{
|
||||
|
@ -378,7 +376,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
cb->dst = dst;
|
||||
cb->src = src;
|
||||
/*
|
||||
@@ -560,15 +665,19 @@ static void bcm2708_fb_copyarea(struct fb_info *info,
|
||||
@@ -560,15 +665,19 @@ static void bcm2708_fb_copyarea(struct f
|
||||
const struct fb_copyarea *region)
|
||||
{
|
||||
struct bcm2708_fb *fb = to_bcm2708(info);
|
||||
|
@ -402,7 +400,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
info->var.xres * info->var.yres > 1920 * 1200 ||
|
||||
region->width <= 0 || region->width > info->var.xres ||
|
||||
region->height <= 0 || region->height > info->var.yres ||
|
||||
@@ -595,8 +704,8 @@ static void bcm2708_fb_copyarea(struct fb_info *info,
|
||||
@@ -595,8 +704,8 @@ static void bcm2708_fb_copyarea(struct f
|
||||
* 1920x1200 resolution at 32bpp pixel depth.
|
||||
*/
|
||||
int y;
|
||||
|
@ -413,7 +411,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
int scanline_size = bytes_per_pixel * region->width;
|
||||
int scanlines_per_cb = (64 * 1024 - 16 * 1024) / scanline_size;
|
||||
|
||||
@@ -646,10 +755,10 @@ static void bcm2708_fb_copyarea(struct fb_info *info,
|
||||
@@ -646,10 +755,10 @@ static void bcm2708_fb_copyarea(struct f
|
||||
}
|
||||
set_dma_cb(cb, burst_size,
|
||||
fb->fb_bus_address + dy * fb->fb.fix.line_length +
|
||||
|
@ -426,7 +424,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
stride,
|
||||
region->width * bytes_per_pixel,
|
||||
region->height);
|
||||
@@ -659,32 +768,33 @@ static void bcm2708_fb_copyarea(struct fb_info *info,
|
||||
@@ -659,32 +768,33 @@ static void bcm2708_fb_copyarea(struct f
|
||||
cb->next = 0;
|
||||
|
||||
if (pixels < dma_busy_wait_threshold) {
|
||||
|
@ -471,7 +469,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
|
||||
/* FIXME: should read status register to check if this is
|
||||
* actually interrupting us or not, in case this interrupt
|
||||
@@ -694,9 +804,9 @@ static irqreturn_t bcm2708_fb_dma_irq(int irq, void *cxt)
|
||||
@@ -694,9 +804,9 @@ static irqreturn_t bcm2708_fb_dma_irq(in
|
||||
*/
|
||||
|
||||
/* acknowledge the interrupt */
|
||||
|
@ -483,7 +481,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
@@ -729,11 +839,23 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb)
|
||||
@@ -729,11 +839,23 @@ static int bcm2708_fb_register(struct bc
|
||||
fb->fb.fix.ywrapstep = 0;
|
||||
fb->fb.fix.accel = FB_ACCEL_NONE;
|
||||
|
||||
|
@ -512,7 +510,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
fb->fb.var.vmode = FB_VMODE_NONINTERLACED;
|
||||
fb->fb.var.activate = FB_ACTIVATE_NOW;
|
||||
fb->fb.var.nonstd = 0;
|
||||
@@ -749,26 +871,23 @@ static int bcm2708_fb_register(struct bcm2708_fb *fb)
|
||||
@@ -749,26 +871,23 @@ static int bcm2708_fb_register(struct bc
|
||||
fb->fb.monspecs.dclkmax = 100000000;
|
||||
|
||||
bcm2708_fb_set_bitfields(&fb->fb.var);
|
||||
|
@ -543,7 +541,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
out:
|
||||
return ret;
|
||||
}
|
||||
@@ -777,10 +896,18 @@ static int bcm2708_fb_probe(struct platform_device *dev)
|
||||
@@ -777,10 +896,18 @@ static int bcm2708_fb_probe(struct platf
|
||||
{
|
||||
struct device_node *fw_np;
|
||||
struct rpi_firmware *fw;
|
||||
|
@ -564,7 +562,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
/* Remove comment when booting without Device Tree is no longer supported
|
||||
* if (!fw_np) {
|
||||
* dev_err(&dev->dev, "Missing firmware node\n");
|
||||
@@ -788,90 +915,154 @@ static int bcm2708_fb_probe(struct platform_device *dev)
|
||||
@@ -788,90 +915,154 @@ static int bcm2708_fb_probe(struct platf
|
||||
* }
|
||||
*/
|
||||
fw = rpi_firmware_get(fw_np);
|
||||
|
@ -592,20 +590,17 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
+ ret = 0;
|
||||
+ } else {
|
||||
+ fbdev->firmware_supports_multifb = 1;
|
||||
}
|
||||
|
||||
- fb->fw = fw;
|
||||
- bcm2708_fb_debugfs_init(fb);
|
||||
+ }
|
||||
+
|
||||
+ if (num_displays > MAX_FRAMEBUFFERS) {
|
||||
+ dev_warn(&dev->dev,
|
||||
+ "More displays reported from firmware than supported in driver (%u vs %u)",
|
||||
+ num_displays, MAX_FRAMEBUFFERS);
|
||||
+ num_displays = MAX_FRAMEBUFFERS;
|
||||
+ }
|
||||
}
|
||||
|
||||
- fb->cb_base = dma_alloc_wc(&dev->dev, SZ_64K,
|
||||
- &fb->cb_handle, GFP_KERNEL);
|
||||
- if (!fb->cb_base) {
|
||||
- fb->fw = fw;
|
||||
- bcm2708_fb_debugfs_init(fb);
|
||||
+ dev_info(&dev->dev, "FB found %d display(s)\n", num_displays);
|
||||
+
|
||||
+ /* Set up the DMA information. Note we have just one set of DMA
|
||||
|
@ -614,7 +609,10 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
+ */
|
||||
+
|
||||
+ mutex_init(&fbdev->dma_mutex);
|
||||
+
|
||||
|
||||
- fb->cb_base = dma_alloc_wc(&dev->dev, SZ_64K,
|
||||
- &fb->cb_handle, GFP_KERNEL);
|
||||
- if (!fb->cb_base) {
|
||||
+ fbdev->cb_base = dma_alloc_wc(&dev->dev, SZ_64K,
|
||||
+ &fbdev->cb_handle,
|
||||
+ GFP_KERNEL);
|
||||
|
@ -653,26 +651,15 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
+ rpi_firmware_property(fbdev->fw,
|
||||
+ RPI_FIRMWARE_GET_VC_MEMORY,
|
||||
+ &gpu_mem, sizeof(gpu_mem));
|
||||
|
||||
- fb->dev = dev;
|
||||
- fb->fb.device = &dev->dev;
|
||||
+
|
||||
+ for (i = 0; i < num_displays; i++) {
|
||||
+ struct bcm2708_fb *fb = &fbdev->displays[i];
|
||||
|
||||
- /* failure here isn't fatal, but we'll fail in vc_mem_copy if
|
||||
- * fb->gpu is not valid
|
||||
- */
|
||||
- rpi_firmware_property(fb->fw, RPI_FIRMWARE_GET_VC_MEMORY, &fb->gpu,
|
||||
- sizeof(fb->gpu));
|
||||
+
|
||||
+ fb->display_settings.display_num = i;
|
||||
+ fb->dev = dev;
|
||||
+ fb->fb.device = &dev->dev;
|
||||
+ fb->fbdev = fbdev;
|
||||
|
||||
- ret = bcm2708_fb_register(fb);
|
||||
- if (ret == 0) {
|
||||
- platform_set_drvdata(dev, fb);
|
||||
- goto out;
|
||||
+
|
||||
+ fb->gpu.base = gpu_mem.base;
|
||||
+ fb->gpu.length = gpu_mem.length;
|
||||
+
|
||||
|
@ -685,12 +672,23 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
+ memset(&fb->display_settings, 0,
|
||||
+ sizeof(fb->display_settings));
|
||||
+ }
|
||||
+
|
||||
|
||||
- fb->dev = dev;
|
||||
- fb->fb.device = &dev->dev;
|
||||
+ ret = bcm2708_fb_register(fb);
|
||||
+
|
||||
|
||||
- /* failure here isn't fatal, but we'll fail in vc_mem_copy if
|
||||
- * fb->gpu is not valid
|
||||
- */
|
||||
- rpi_firmware_property(fb->fw, RPI_FIRMWARE_GET_VC_MEMORY, &fb->gpu,
|
||||
- sizeof(fb->gpu));
|
||||
+ if (ret == 0) {
|
||||
+ bcm2708_fb_debugfs_init(fb);
|
||||
+
|
||||
|
||||
- ret = bcm2708_fb_register(fb);
|
||||
- if (ret == 0) {
|
||||
- platform_set_drvdata(dev, fb);
|
||||
- goto out;
|
||||
+ fbdev->num_displays++;
|
||||
+
|
||||
+ dev_info(&dev->dev,
|
||||
|
@ -738,14 +736,15 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
- if (fb->fb.screen_base)
|
||||
- iounmap(fb->fb.screen_base);
|
||||
- unregister_framebuffer(&fb->fb);
|
||||
+ for (i = 0; i < fbdev->num_displays; i++) {
|
||||
+ if (fbdev->displays[i].fb.screen_base)
|
||||
+ iounmap(fbdev->displays[i].fb.screen_base);
|
||||
|
||||
-
|
||||
- dma_free_wc(&dev->dev, SZ_64K, fb->cb_base, fb->cb_handle);
|
||||
- bcm_dma_chan_free(fb->dma_chan);
|
||||
-
|
||||
- bcm2708_fb_debugfs_deinit(fb);
|
||||
+ for (i = 0; i < fbdev->num_displays; i++) {
|
||||
+ if (fbdev->displays[i].fb.screen_base)
|
||||
+ iounmap(fbdev->displays[i].fb.screen_base);
|
||||
+
|
||||
+ if (fbdev->displays[i].fbdev) {
|
||||
+ unregister_framebuffer(&fbdev->displays[i].fb);
|
||||
+ bcm2708_fb_debugfs_deinit(&fbdev->displays[i]);
|
||||
|
@ -763,7 +762,7 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -886,10 +1077,10 @@ static struct platform_driver bcm2708_fb_driver = {
|
||||
@@ -886,10 +1077,10 @@ static struct platform_driver bcm2708_fb
|
||||
.probe = bcm2708_fb_probe,
|
||||
.remove = bcm2708_fb_remove,
|
||||
.driver = {
|
||||
|
@ -778,11 +777,9 @@ index 831e9a7b6818..f66957d48dc3 100644
|
|||
};
|
||||
|
||||
static int __init bcm2708_fb_init(void)
|
||||
diff --git a/include/soc/bcm2835/raspberrypi-firmware.h b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
index 40b8a32fced0..a8cff19aea83 100644
|
||||
--- a/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
+++ b/include/soc/bcm2835/raspberrypi-firmware.h
|
||||
@@ -104,9 +104,15 @@ enum rpi_firmware_property_tag {
|
||||
@@ -105,9 +105,15 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_FRAMEBUFFER_GET_VIRTUAL_OFFSET = 0x00040009,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_GET_OVERSCAN = 0x0004000a,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_GET_PALETTE = 0x0004000b,
|
||||
|
@ -798,7 +795,7 @@ index 40b8a32fced0..a8cff19aea83 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_TEST_PHYSICAL_WIDTH_HEIGHT = 0x00044003,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_WIDTH_HEIGHT = 0x00044004,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_TEST_DEPTH = 0x00044005,
|
||||
@@ -115,6 +121,8 @@ enum rpi_firmware_property_tag {
|
||||
@@ -116,6 +122,8 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_FRAMEBUFFER_TEST_VIRTUAL_OFFSET = 0x00044009,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_TEST_OVERSCAN = 0x0004400a,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_TEST_PALETTE = 0x0004400b,
|
||||
|
@ -807,7 +804,7 @@ index 40b8a32fced0..a8cff19aea83 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_TEST_VSYNC = 0x0004400e,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_PHYSICAL_WIDTH_HEIGHT = 0x00048003,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_WIDTH_HEIGHT = 0x00048004,
|
||||
@@ -125,9 +133,12 @@ enum rpi_firmware_property_tag {
|
||||
@@ -126,9 +134,12 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_VIRTUAL_OFFSET = 0x00048009,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_OVERSCAN = 0x0004800a,
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_PALETTE = 0x0004800b,
|
||||
|
@ -820,7 +817,7 @@ index 40b8a32fced0..a8cff19aea83 100644
|
|||
RPI_FIRMWARE_FRAMEBUFFER_SET_BACKLIGHT = 0x0004800f,
|
||||
|
||||
RPI_FIRMWARE_VCHIQ_INIT = 0x00048010,
|
||||
@@ -136,6 +147,8 @@ enum rpi_firmware_property_tag {
|
||||
@@ -137,6 +148,8 @@ enum rpi_firmware_property_tag {
|
||||
RPI_FIRMWARE_GET_DMA_CHANNELS = 0x00060001,
|
||||
};
|
||||
|
||||
|
@ -829,6 +826,3 @@ index 40b8a32fced0..a8cff19aea83 100644
|
|||
#if IS_ENABLED(CONFIG_RASPBERRYPI_FIRMWARE)
|
||||
int rpi_firmware_property(struct rpi_firmware *fw,
|
||||
u32 tag, void *data, size_t len);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 52d69b5f72a13c68f51e2d4baf80d8fa436cc4b1 Mon Sep 17 00:00:00 2001
|
||||
From f2b7b1e3b70bc00a93ec9cbdc07ebeae821e166c Mon Sep 17 00:00:00 2001
|
||||
From: Siarhei Siamashka <siarhei.siamashka@gmail.com>
|
||||
Date: Mon, 17 Jun 2013 13:32:11 +0300
|
||||
Subject: [PATCH 075/634] fbdev: add FBIOCOPYAREA ioctl
|
||||
Subject: [PATCH 067/828] fbdev: add FBIOCOPYAREA ioctl
|
||||
|
||||
Based on the patch authored by Ali Gholami Rudi at
|
||||
https://lkml.org/lkml/2009/7/13/153
|
||||
|
@ -26,8 +26,6 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||
include/uapi/linux/fb.h | 12 +++
|
||||
3 files changed, 213 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/bcm2708_fb.c b/drivers/video/fbdev/bcm2708_fb.c
|
||||
index f66957d48dc3..0e9ec3f593b8 100644
|
||||
--- a/drivers/video/fbdev/bcm2708_fb.c
|
||||
+++ b/drivers/video/fbdev/bcm2708_fb.c
|
||||
@@ -32,8 +32,10 @@
|
||||
|
@ -41,7 +39,7 @@ index f66957d48dc3..0e9ec3f593b8 100644
|
|||
#include <soc/bcm2835/raspberrypi-firmware.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
@@ -184,9 +186,6 @@ static int bcm2708_fb_debugfs_init(struct bcm2708_fb *fb)
|
||||
@@ -184,9 +186,6 @@ static int bcm2708_fb_debugfs_init(struc
|
||||
|
||||
fb->debugfs_subdir = debugfs_create_dir(buf, fb->debugfs_dir);
|
||||
|
||||
|
@ -51,7 +49,7 @@ index f66957d48dc3..0e9ec3f593b8 100644
|
|||
if (!fb->debugfs_subdir) {
|
||||
dev_warn(fb->fb.dev, "%s: could not create debugfs entry %u\n",
|
||||
__func__, fb->display_settings.display_num);
|
||||
@@ -603,7 +602,110 @@ static int bcm2708_fb_pan_display(struct fb_var_screeninfo *var,
|
||||
@@ -603,7 +602,110 @@ static int bcm2708_fb_pan_display(struct
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -163,7 +161,7 @@ index f66957d48dc3..0e9ec3f593b8 100644
|
|||
static int bcm2708_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
@@ -619,6 +721,21 @@ static int bcm2708_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
@@ -619,6 +721,21 @@ static int bcm2708_ioctl(struct fb_info
|
||||
RPI_FIRMWARE_FRAMEBUFFER_SET_VSYNC,
|
||||
&dummy, sizeof(dummy));
|
||||
break;
|
||||
|
@ -185,7 +183,7 @@ index f66957d48dc3..0e9ec3f593b8 100644
|
|||
default:
|
||||
dev_dbg(info->device, "Unknown ioctl 0x%x\n", cmd);
|
||||
return -ENOTTY;
|
||||
@@ -629,6 +746,48 @@ static int bcm2708_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
@@ -629,6 +746,48 @@ static int bcm2708_ioctl(struct fb_info
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -244,11 +242,9 @@ index f66957d48dc3..0e9ec3f593b8 100644
|
|||
};
|
||||
|
||||
static int bcm2708_fb_register(struct bcm2708_fb *fb)
|
||||
diff --git a/drivers/video/fbdev/core/fbmem.c b/drivers/video/fbdev/core/fbmem.c
|
||||
index 7420d2c16e47..f9b620f6a074 100644
|
||||
--- a/drivers/video/fbdev/core/fbmem.c
|
||||
+++ b/drivers/video/fbdev/core/fbmem.c
|
||||
@@ -1085,6 +1085,30 @@ fb_blank(struct fb_info *info, int blank)
|
||||
@@ -1086,6 +1086,30 @@ fb_blank(struct fb_info *info, int blank
|
||||
}
|
||||
EXPORT_SYMBOL(fb_blank);
|
||||
|
||||
|
@ -279,7 +275,7 @@ index 7420d2c16e47..f9b620f6a074 100644
|
|||
static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
unsigned long arg)
|
||||
{
|
||||
@@ -1093,6 +1117,7 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
@@ -1094,6 +1118,7 @@ static long do_fb_ioctl(struct fb_info *
|
||||
struct fb_fix_screeninfo fix;
|
||||
struct fb_cmap cmap_from;
|
||||
struct fb_cmap_user cmap;
|
||||
|
@ -287,7 +283,7 @@ index 7420d2c16e47..f9b620f6a074 100644
|
|||
void __user *argp = (void __user *)arg;
|
||||
long ret = 0;
|
||||
|
||||
@@ -1168,6 +1193,15 @@ static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
|
||||
@@ -1169,6 +1194,15 @@ static long do_fb_ioctl(struct fb_info *
|
||||
unlock_fb_info(info);
|
||||
console_unlock();
|
||||
break;
|
||||
|
@ -299,11 +295,11 @@ index 7420d2c16e47..f9b620f6a074 100644
|
|||
+ ret = fb_copyarea_user(info, ©);
|
||||
+ break;
|
||||
+ }
|
||||
+ /* fall through */
|
||||
+ fallthrough;
|
||||
default:
|
||||
lock_fb_info(info);
|
||||
fb = info->fbops;
|
||||
@@ -1307,6 +1341,7 @@ static long fb_compat_ioctl(struct file *file, unsigned int cmd,
|
||||
@@ -1308,6 +1342,7 @@ static long fb_compat_ioctl(struct file
|
||||
case FBIOPAN_DISPLAY:
|
||||
case FBIOGET_CON2FBMAP:
|
||||
case FBIOPUT_CON2FBMAP:
|
||||
|
@ -311,8 +307,6 @@ index 7420d2c16e47..f9b620f6a074 100644
|
|||
arg = (unsigned long) compat_ptr(arg);
|
||||
fallthrough;
|
||||
case FBIOBLANK:
|
||||
diff --git a/include/uapi/linux/fb.h b/include/uapi/linux/fb.h
|
||||
index 4c14e8be7267..3c6f12b76214 100644
|
||||
--- a/include/uapi/linux/fb.h
|
||||
+++ b/include/uapi/linux/fb.h
|
||||
@@ -35,6 +35,12 @@
|
||||
|
@ -341,6 +335,3 @@ index 4c14e8be7267..3c6f12b76214 100644
|
|||
struct fb_fillrect {
|
||||
__u32 dx; /* screen-relative */
|
||||
__u32 dy;
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 17159d3029ede4324a930ab62cb38d9844e2071e Mon Sep 17 00:00:00 2001
|
||||
From e2bda55c62d31d0a2de2aa8b8e286c1af2a67c55 Mon Sep 17 00:00:00 2001
|
||||
From: Harm Hanemaaijer <fgenfb@yahoo.com>
|
||||
Date: Thu, 20 Jun 2013 20:21:39 +0200
|
||||
Subject: [PATCH 076/634] Speed up console framebuffer imageblit function
|
||||
Subject: [PATCH 068/828] Speed up console framebuffer imageblit function
|
||||
|
||||
Especially on platforms with a slower CPU but a relatively high
|
||||
framebuffer fill bandwidth, like current ARM devices, the existing
|
||||
|
@ -32,8 +32,6 @@ Signed-off-by: Harm Hanemaaijer <fgenfb@yahoo.com>
|
|||
drivers/video/fbdev/core/cfbimgblt.c | 152 ++++++++++++++++++++++++++-
|
||||
1 file changed, 147 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/video/fbdev/core/cfbimgblt.c b/drivers/video/fbdev/core/cfbimgblt.c
|
||||
index a2bb276a8b24..436494fba15a 100644
|
||||
--- a/drivers/video/fbdev/core/cfbimgblt.c
|
||||
+++ b/drivers/video/fbdev/core/cfbimgblt.c
|
||||
@@ -28,6 +28,11 @@
|
||||
|
@ -48,7 +46,7 @@ index a2bb276a8b24..436494fba15a 100644
|
|||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/string.h>
|
||||
@@ -262,6 +267,133 @@ static inline void fast_imageblit(const struct fb_image *image, struct fb_info *
|
||||
@@ -262,6 +267,133 @@ static inline void fast_imageblit(const
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -182,7 +180,7 @@ index a2bb276a8b24..436494fba15a 100644
|
|||
void cfb_imageblit(struct fb_info *p, const struct fb_image *image)
|
||||
{
|
||||
u32 fgcolor, bgcolor, start_index, bitstart, pitch_index = 0;
|
||||
@@ -294,11 +426,21 @@ void cfb_imageblit(struct fb_info *p, const struct fb_image *image)
|
||||
@@ -294,11 +426,21 @@ void cfb_imageblit(struct fb_info *p, co
|
||||
bgcolor = image->bg_color;
|
||||
}
|
||||
|
||||
|
@ -209,6 +207,3 @@ index a2bb276a8b24..436494fba15a 100644
|
|||
slow_imageblit(image, p, dst1, fgcolor, bgcolor,
|
||||
start_index, pitch_index);
|
||||
} else
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From b6c946afd75d362d948800546f05aceb24866f55 Mon Sep 17 00:00:00 2001
|
||||
From b38dd633de6fc7d969265acdb9b27f115467dd00 Mon Sep 17 00:00:00 2001
|
||||
From: Florian Meier <florian.meier@koalo.de>
|
||||
Date: Fri, 22 Nov 2013 14:22:53 +0100
|
||||
Subject: [PATCH 077/634] dmaengine: Add support for BCM2708
|
||||
Subject: [PATCH 069/828] dmaengine: Add support for BCM2708
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -176,8 +176,6 @@ Signed-off-by: Andrei Gherzan <andrei@gherzan.com>
|
|||
create mode 100644 drivers/dma/bcm2708-dmaengine.c
|
||||
create mode 100644 include/linux/platform_data/dma-bcm2708.h
|
||||
|
||||
diff --git a/drivers/dma/Kconfig b/drivers/dma/Kconfig
|
||||
index f5afe0ec4f96..bb1e9fb7ecda 100644
|
||||
--- a/drivers/dma/Kconfig
|
||||
+++ b/drivers/dma/Kconfig
|
||||
@@ -127,7 +127,7 @@ config BCM_SBA_RAID
|
||||
|
@ -200,8 +198,6 @@ index f5afe0ec4f96..bb1e9fb7ecda 100644
|
|||
config XGENE_DMA
|
||||
tristate "APM X-Gene DMA support"
|
||||
depends on ARCH_XGENE || COMPILE_TEST
|
||||
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
|
||||
index 616d926cf2a5..2f9fa1a12f51 100644
|
||||
--- a/drivers/dma/Makefile
|
||||
+++ b/drivers/dma/Makefile
|
||||
@@ -21,6 +21,7 @@ obj-$(CONFIG_AT_HDMAC) += at_hdmac.o
|
||||
|
@ -212,9 +208,6 @@ index 616d926cf2a5..2f9fa1a12f51 100644
|
|||
obj-$(CONFIG_DMA_BCM2835) += bcm2835-dma.o
|
||||
obj-$(CONFIG_DMA_JZ4780) += dma-jz4780.o
|
||||
obj-$(CONFIG_DMA_SA11X0) += sa11x0-dma.o
|
||||
diff --git a/drivers/dma/bcm2708-dmaengine.c b/drivers/dma/bcm2708-dmaengine.c
|
||||
new file mode 100644
|
||||
index 000000000000..075da9aadf6d
|
||||
--- /dev/null
|
||||
+++ b/drivers/dma/bcm2708-dmaengine.c
|
||||
@@ -0,0 +1,281 @@
|
||||
|
@ -499,9 +492,6 @@ index 000000000000..075da9aadf6d
|
|||
+EXPORT_SYMBOL(bcm_dmaman_remove);
|
||||
+
|
||||
+MODULE_LICENSE("GPL");
|
||||
diff --git a/include/linux/platform_data/dma-bcm2708.h b/include/linux/platform_data/dma-bcm2708.h
|
||||
new file mode 100644
|
||||
index 000000000000..6ca874d332a8
|
||||
--- /dev/null
|
||||
+++ b/include/linux/platform_data/dma-bcm2708.h
|
||||
@@ -0,0 +1,143 @@
|
||||
|
@ -648,6 +638,3 @@ index 000000000000..6ca874d332a8
|
|||
+#endif /* CONFIG_DMA_BCM2708 || CONFIG_DMA_BCM2708_MODULE */
|
||||
+
|
||||
+#endif /* _PLAT_BCM2708_DMA_H */
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 15fb4ba369a520f2b426837c44310c8041c5a7cb Mon Sep 17 00:00:00 2001
|
||||
From a5e0873893ea7c3cefae8792572ea0fb9bf2e03e Mon Sep 17 00:00:00 2001
|
||||
From: gellert <gellert@raspberrypi.org>
|
||||
Date: Fri, 15 Aug 2014 16:35:06 +0100
|
||||
Subject: [PATCH 078/634] MMC: added alternative MMC driver
|
||||
Subject: [PATCH 070/828] MMC: added alternative MMC driver
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -228,8 +228,6 @@ bcm2835-mmc: uninitialized_var is no more
|
|||
9 files changed, 1663 insertions(+), 5 deletions(-)
|
||||
create mode 100644 drivers/mmc/host/bcm2835-mmc.c
|
||||
|
||||
diff --git a/drivers/mmc/core/block.c b/drivers/mmc/core/block.c
|
||||
index 431af5e8be2f..8afaba9912e3 100644
|
||||
--- a/drivers/mmc/core/block.c
|
||||
+++ b/drivers/mmc/core/block.c
|
||||
@@ -171,6 +171,13 @@ static DEFINE_MUTEX(open_lock);
|
||||
|
@ -246,7 +244,7 @@ index 431af5e8be2f..8afaba9912e3 100644
|
|||
static inline int mmc_blk_part_switch(struct mmc_card *card,
|
||||
unsigned int part_type);
|
||||
static void mmc_blk_rw_rq_prep(struct mmc_queue_req *mqrq,
|
||||
@@ -2886,6 +2893,8 @@ static int mmc_blk_probe(struct mmc_card *card)
|
||||
@@ -2924,6 +2931,8 @@ static int mmc_blk_probe(struct mmc_card
|
||||
{
|
||||
struct mmc_blk_data *md;
|
||||
int ret = 0;
|
||||
|
@ -255,7 +253,7 @@ index 431af5e8be2f..8afaba9912e3 100644
|
|||
|
||||
/*
|
||||
* Check that the card supports the command class(es) we need.
|
||||
@@ -2893,7 +2902,16 @@ static int mmc_blk_probe(struct mmc_card *card)
|
||||
@@ -2931,7 +2940,16 @@ static int mmc_blk_probe(struct mmc_card
|
||||
if (!(card->csd.cmdclass & CCC_BLOCK_READ))
|
||||
return -ENODEV;
|
||||
|
||||
|
@ -273,7 +271,7 @@ index 431af5e8be2f..8afaba9912e3 100644
|
|||
|
||||
card->complete_wq = alloc_workqueue("mmc_complete",
|
||||
WQ_MEM_RECLAIM | WQ_HIGHPRI, 0);
|
||||
@@ -2908,6 +2926,17 @@ static int mmc_blk_probe(struct mmc_card *card)
|
||||
@@ -2946,6 +2964,17 @@ static int mmc_blk_probe(struct mmc_card
|
||||
goto out_free;
|
||||
}
|
||||
|
||||
|
@ -291,8 +289,6 @@ index 431af5e8be2f..8afaba9912e3 100644
|
|||
ret = mmc_blk_alloc_parts(card, md);
|
||||
if (ret)
|
||||
goto out;
|
||||
diff --git a/drivers/mmc/core/core.c b/drivers/mmc/core/core.c
|
||||
index 240c5af793dc..e76ac07a91a6 100644
|
||||
--- a/drivers/mmc/core/core.c
|
||||
+++ b/drivers/mmc/core/core.c
|
||||
@@ -1801,7 +1801,8 @@ EXPORT_SYMBOL(mmc_erase);
|
||||
|
@ -305,11 +301,9 @@ index 240c5af793dc..e76ac07a91a6 100644
|
|||
return 1;
|
||||
return 0;
|
||||
}
|
||||
diff --git a/drivers/mmc/core/quirks.h b/drivers/mmc/core/quirks.h
|
||||
index d68e6e513a4f..e41bc00ece42 100644
|
||||
--- a/drivers/mmc/core/quirks.h
|
||||
+++ b/drivers/mmc/core/quirks.h
|
||||
@@ -99,6 +99,14 @@ static const struct mmc_fixup __maybe_unused mmc_blk_fixups[] = {
|
||||
@@ -99,6 +99,14 @@ static const struct mmc_fixup __maybe_un
|
||||
MMC_FIXUP("V10016", CID_MANFID_KINGSTON, CID_OEMID_ANY, add_quirk_mmc,
|
||||
MMC_QUIRK_TRIM_BROKEN),
|
||||
|
||||
|
@ -324,8 +318,6 @@ index d68e6e513a4f..e41bc00ece42 100644
|
|||
END_FIXUP
|
||||
};
|
||||
|
||||
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
|
||||
index ccc148cdb5ee..e1f699de52ce 100644
|
||||
--- a/drivers/mmc/host/Kconfig
|
||||
+++ b/drivers/mmc/host/Kconfig
|
||||
@@ -5,6 +5,35 @@
|
||||
|
@ -364,11 +356,9 @@ index ccc148cdb5ee..e1f699de52ce 100644
|
|||
config MMC_DEBUG
|
||||
bool "MMC host drivers debugging"
|
||||
depends on MMC != n
|
||||
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
|
||||
index 14004cc09aaa..1148f78ff6f9 100644
|
||||
--- a/drivers/mmc/host/Makefile
|
||||
+++ b/drivers/mmc/host/Makefile
|
||||
@@ -23,6 +23,7 @@ obj-$(CONFIG_MMC_SDHCI_F_SDH30) += sdhci_f_sdh30.o
|
||||
@@ -23,6 +23,7 @@ obj-$(CONFIG_MMC_SDHCI_F_SDH30) += sdhci
|
||||
obj-$(CONFIG_MMC_SDHCI_MILBEAUT) += sdhci-milbeaut.o
|
||||
obj-$(CONFIG_MMC_SDHCI_SPEAR) += sdhci-spear.o
|
||||
obj-$(CONFIG_MMC_SDHCI_AM654) += sdhci_am654.o
|
||||
|
@ -376,9 +366,6 @@ index 14004cc09aaa..1148f78ff6f9 100644
|
|||
obj-$(CONFIG_MMC_WBSD) += wbsd.o
|
||||
obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
|
||||
obj-$(CONFIG_MMC_ALCOR) += alcor.o
|
||||
diff --git a/drivers/mmc/host/bcm2835-mmc.c b/drivers/mmc/host/bcm2835-mmc.c
|
||||
new file mode 100644
|
||||
index 000000000000..cdc1318e5936
|
||||
--- /dev/null
|
||||
+++ b/drivers/mmc/host/bcm2835-mmc.c
|
||||
@@ -0,0 +1,1576 @@
|
||||
|
@ -1958,11 +1945,9 @@ index 000000000000..cdc1318e5936
|
|||
+MODULE_DESCRIPTION("BCM2835 SDHCI driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+MODULE_AUTHOR("Gellert Weisz");
|
||||
diff --git a/drivers/mmc/host/sdhci-iproc.c b/drivers/mmc/host/sdhci-iproc.c
|
||||
index 032bf852397f..37b0e1cfe7b7 100644
|
||||
--- a/drivers/mmc/host/sdhci-iproc.c
|
||||
+++ b/drivers/mmc/host/sdhci-iproc.c
|
||||
@@ -173,6 +173,17 @@ static unsigned int sdhci_iproc_get_max_clock(struct sdhci_host *host)
|
||||
@@ -173,6 +173,17 @@ static unsigned int sdhci_iproc_get_max_
|
||||
return pltfm_host->clock;
|
||||
}
|
||||
|
||||
|
@ -1980,7 +1965,7 @@ index 032bf852397f..37b0e1cfe7b7 100644
|
|||
/*
|
||||
* There is a known bug on BCM2711's SDHCI core integration where the
|
||||
* controller will hang when the difference between the core clock and the bus
|
||||
@@ -207,6 +218,7 @@ static const struct sdhci_ops sdhci_iproc_32only_ops = {
|
||||
@@ -207,6 +218,7 @@ static const struct sdhci_ops sdhci_ipro
|
||||
.write_b = sdhci_iproc_writeb,
|
||||
.set_clock = sdhci_set_clock,
|
||||
.get_max_clock = sdhci_iproc_get_max_clock,
|
||||
|
@ -1988,8 +1973,6 @@ index 032bf852397f..37b0e1cfe7b7 100644
|
|||
.set_bus_width = sdhci_set_bus_width,
|
||||
.reset = sdhci_reset,
|
||||
.set_uhs_signaling = sdhci_set_uhs_signaling,
|
||||
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
|
||||
index 2d80a04e11d8..812e67fba8af 100644
|
||||
--- a/drivers/mmc/host/sdhci.c
|
||||
+++ b/drivers/mmc/host/sdhci.c
|
||||
@@ -40,7 +40,7 @@
|
||||
|
@ -2001,7 +1984,7 @@ index 2d80a04e11d8..812e67fba8af 100644
|
|||
|
||||
#define MAX_TUNING_LOOP 40
|
||||
|
||||
@@ -3131,7 +3131,7 @@ static void sdhci_timeout_timer(struct timer_list *t)
|
||||
@@ -3143,7 +3143,7 @@ static void sdhci_timeout_timer(struct t
|
||||
spin_lock_irqsave(&host->lock, flags);
|
||||
|
||||
if (host->cmd && !sdhci_data_line_cmd(host->cmd)) {
|
||||
|
@ -2010,7 +1993,7 @@ index 2d80a04e11d8..812e67fba8af 100644
|
|||
mmc_hostname(host->mmc));
|
||||
sdhci_dumpregs(host);
|
||||
|
||||
@@ -3153,7 +3153,7 @@ static void sdhci_timeout_data_timer(struct timer_list *t)
|
||||
@@ -3165,7 +3165,7 @@ static void sdhci_timeout_data_timer(str
|
||||
|
||||
if (host->data || host->data_cmd ||
|
||||
(host->cmd && sdhci_data_line_cmd(host->cmd))) {
|
||||
|
@ -2019,8 +2002,6 @@ index 2d80a04e11d8..812e67fba8af 100644
|
|||
mmc_hostname(host->mmc));
|
||||
sdhci_dumpregs(host);
|
||||
|
||||
diff --git a/include/linux/mmc/card.h b/include/linux/mmc/card.h
|
||||
index 37f975875102..fca1b210266b 100644
|
||||
--- a/include/linux/mmc/card.h
|
||||
+++ b/include/linux/mmc/card.h
|
||||
@@ -293,6 +293,8 @@ struct mmc_card {
|
||||
|
@ -2032,6 +2013,3 @@ index 37f975875102..fca1b210266b 100644
|
|||
bool reenable_cmdq; /* Re-enable Command Queue */
|
||||
|
||||
unsigned int erase_size; /* erase size in sectors */
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 5323f8f1a65d288ccf964ca8a6d036e5c34a1799 Mon Sep 17 00:00:00 2001
|
||||
From 62a847d64494ded1556600cc1f7df63a00090e5c Mon Sep 17 00:00:00 2001
|
||||
From: Phil Elwell <phil@raspberrypi.org>
|
||||
Date: Wed, 25 Mar 2015 17:49:47 +0000
|
||||
Subject: [PATCH 079/634] Adding bcm2835-sdhost driver, and an overlay to
|
||||
Subject: [PATCH 071/828] Adding bcm2835-sdhost driver, and an overlay to
|
||||
enable it
|
||||
|
||||
BCM2835 has two SD card interfaces. This driver uses the other one.
|
||||
|
@ -259,8 +259,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
3 files changed, 2219 insertions(+)
|
||||
create mode 100644 drivers/mmc/host/bcm2835-sdhost.c
|
||||
|
||||
diff --git a/drivers/mmc/host/Kconfig b/drivers/mmc/host/Kconfig
|
||||
index e1f699de52ce..76c74a1ebf56 100644
|
||||
--- a/drivers/mmc/host/Kconfig
|
||||
+++ b/drivers/mmc/host/Kconfig
|
||||
@@ -34,6 +34,16 @@ config MMC_BCM2835_PIO_DMA_BARRIER
|
||||
|
@ -280,11 +278,9 @@ index e1f699de52ce..76c74a1ebf56 100644
|
|||
config MMC_DEBUG
|
||||
bool "MMC host drivers debugging"
|
||||
depends on MMC != n
|
||||
diff --git a/drivers/mmc/host/Makefile b/drivers/mmc/host/Makefile
|
||||
index 1148f78ff6f9..03c20de4597f 100644
|
||||
--- a/drivers/mmc/host/Makefile
|
||||
+++ b/drivers/mmc/host/Makefile
|
||||
@@ -24,6 +24,7 @@ obj-$(CONFIG_MMC_SDHCI_MILBEAUT) += sdhci-milbeaut.o
|
||||
@@ -24,6 +24,7 @@ obj-$(CONFIG_MMC_SDHCI_MILBEAUT) += sdhc
|
||||
obj-$(CONFIG_MMC_SDHCI_SPEAR) += sdhci-spear.o
|
||||
obj-$(CONFIG_MMC_SDHCI_AM654) += sdhci_am654.o
|
||||
obj-$(CONFIG_MMC_BCM2835_MMC) += bcm2835-mmc.o
|
||||
|
@ -292,9 +288,6 @@ index 1148f78ff6f9..03c20de4597f 100644
|
|||
obj-$(CONFIG_MMC_WBSD) += wbsd.o
|
||||
obj-$(CONFIG_MMC_AU1X) += au1xmmc.o
|
||||
obj-$(CONFIG_MMC_ALCOR) += alcor.o
|
||||
diff --git a/drivers/mmc/host/bcm2835-sdhost.c b/drivers/mmc/host/bcm2835-sdhost.c
|
||||
new file mode 100644
|
||||
index 000000000000..2c4124082785
|
||||
--- /dev/null
|
||||
+++ b/drivers/mmc/host/bcm2835-sdhost.c
|
||||
@@ -0,0 +1,2208 @@
|
||||
|
@ -2506,6 +2499,3 @@ index 000000000000..2c4124082785
|
|||
+MODULE_DESCRIPTION("BCM2835 SDHost driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+MODULE_AUTHOR("Phil Elwell");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From dab7565d73c2f052c9cfe2d8c793682dc51f9dc6 Mon Sep 17 00:00:00 2001
|
||||
From e704db556dfdec5ad0df1903ff1b2e01667cdd76 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Fri, 28 Oct 2016 15:36:43 +0100
|
||||
Subject: [PATCH 080/634] vc_mem: Add vc_mem driver for querying firmware
|
||||
Subject: [PATCH 072/828] vc_mem: Add vc_mem driver for querying firmware
|
||||
memory addresses
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
|
@ -48,9 +48,6 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.com>
|
|||
create mode 100644 drivers/char/broadcom/vc_mem.c
|
||||
create mode 100644 include/linux/broadcom/vc_mem.h
|
||||
|
||||
diff --git a/drivers/char/broadcom/Kconfig b/drivers/char/broadcom/Kconfig
|
||||
new file mode 100644
|
||||
index 000000000000..fc1315209dab
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/Kconfig
|
||||
@@ -0,0 +1,18 @@
|
||||
|
@ -72,16 +69,10 @@ index 000000000000..fc1315209dab
|
|||
+ Helper for videocore memory access and total size allocation.
|
||||
+
|
||||
+endif
|
||||
diff --git a/drivers/char/broadcom/Makefile b/drivers/char/broadcom/Makefile
|
||||
new file mode 100644
|
||||
index 000000000000..06c5c8ad00e7
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/Makefile
|
||||
@@ -0,0 +1 @@
|
||||
+obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
|
||||
diff --git a/drivers/char/broadcom/vc_mem.c b/drivers/char/broadcom/vc_mem.c
|
||||
new file mode 100644
|
||||
index 000000000000..195b61a4387c
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/vc_mem.c
|
||||
@@ -0,0 +1,373 @@
|
||||
|
@ -458,9 +449,6 @@ index 000000000000..195b61a4387c
|
|||
+module_param(phys_addr, uint, 0644);
|
||||
+module_param(mem_size, uint, 0644);
|
||||
+module_param(mem_base, uint, 0644);
|
||||
diff --git a/include/linux/broadcom/vc_mem.h b/include/linux/broadcom/vc_mem.h
|
||||
new file mode 100644
|
||||
index 000000000000..3c7079237496
|
||||
--- /dev/null
|
||||
+++ b/include/linux/broadcom/vc_mem.h
|
||||
@@ -0,0 +1,39 @@
|
||||
|
@ -503,6 +491,3 @@ index 000000000000..3c7079237496
|
|||
+#endif
|
||||
+
|
||||
+#endif /* _VC_MEM_H */
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 8062954ce5d943c81d3a130cafac4d27853f8f86 Mon Sep 17 00:00:00 2001
|
||||
From ef2d1d2b0aa268e543ae56aa7c2ba9e9d4f51135 Mon Sep 17 00:00:00 2001
|
||||
From: Luke Wren <luke@raspberrypi.org>
|
||||
Date: Fri, 21 Aug 2015 23:14:48 +0100
|
||||
Subject: [PATCH 081/634] Add /dev/gpiomem device for rootless user GPIO access
|
||||
Subject: [PATCH 073/828] Add /dev/gpiomem device for rootless user GPIO access
|
||||
|
||||
Signed-off-by: Luke Wren <luke@raspberrypi.org>
|
||||
|
||||
|
@ -17,8 +17,6 @@ See: https://github.com/raspberrypi/linux/issues/1154
|
|||
3 files changed, 267 insertions(+)
|
||||
create mode 100644 drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
|
||||
diff --git a/drivers/char/broadcom/Kconfig b/drivers/char/broadcom/Kconfig
|
||||
index fc1315209dab..13d4fce859ac 100644
|
||||
--- a/drivers/char/broadcom/Kconfig
|
||||
+++ b/drivers/char/broadcom/Kconfig
|
||||
@@ -16,3 +16,11 @@ config BCM2708_VCMEM
|
||||
|
@ -33,16 +31,11 @@ index fc1315209dab..13d4fce859ac 100644
|
|||
+ Provides users with root-free access to the GPIO registers
|
||||
+ on the 2835. Calling mmap(/dev/gpiomem) will map the GPIO
|
||||
+ register page to the user's pointer.
|
||||
diff --git a/drivers/char/broadcom/Makefile b/drivers/char/broadcom/Makefile
|
||||
index 06c5c8ad00e7..c8747a4a11e7 100644
|
||||
--- a/drivers/char/broadcom/Makefile
|
||||
+++ b/drivers/char/broadcom/Makefile
|
||||
@@ -1 +1,2 @@
|
||||
obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
|
||||
+obj-$(CONFIG_BCM2835_DEVGPIOMEM)+= bcm2835-gpiomem.o
|
||||
diff --git a/drivers/char/broadcom/bcm2835-gpiomem.c b/drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
new file mode 100644
|
||||
index 000000000000..f5e7f1ba8fb6
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/bcm2835-gpiomem.c
|
||||
@@ -0,0 +1,258 @@
|
||||
|
@ -304,6 +297,3 @@ index 000000000000..f5e7f1ba8fb6
|
|||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DESCRIPTION("gpiomem driver for accessing GPIO from userspace");
|
||||
+MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 42a5686ce064d1983505a18c242b449e01d394a2 Mon Sep 17 00:00:00 2001
|
||||
From e58cb5414ddc9f72731eecd2fbfdcb7423d5135e Mon Sep 17 00:00:00 2001
|
||||
From: Luke Wren <wren6991@gmail.com>
|
||||
Date: Sat, 5 Sep 2015 01:14:45 +0100
|
||||
Subject: [PATCH 082/634] Add SMI driver
|
||||
Subject: [PATCH 074/828] Add SMI driver
|
||||
|
||||
Signed-off-by: Luke Wren <wren6991@gmail.com>
|
||||
|
||||
|
@ -32,9 +32,6 @@ bcm2835_smi: re-add dereference to fix DMA transfers
|
|||
create mode 100644 drivers/misc/bcm2835_smi.c
|
||||
create mode 100644 include/linux/broadcom/bcm2835_smi.h
|
||||
|
||||
diff --git a/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt b/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt
|
||||
new file mode 100644
|
||||
index 000000000000..68cc8ebc3392
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi-dev.txt
|
||||
@@ -0,0 +1,17 @@
|
||||
|
@ -55,9 +52,6 @@ index 000000000000..68cc8ebc3392
|
|||
+- None.
|
||||
+
|
||||
+
|
||||
diff --git a/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt b/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt
|
||||
new file mode 100644
|
||||
index 000000000000..b76dc694f1ac
|
||||
--- /dev/null
|
||||
+++ b/Documentation/devicetree/bindings/misc/brcm,bcm2835-smi.txt
|
||||
@@ -0,0 +1,48 @@
|
||||
|
@ -109,8 +103,6 @@ index 000000000000..b76dc694f1ac
|
|||
+ brcm,pull = <2 2 2 2 2 2 0 0 0 0 0 0 0 0>;
|
||||
+};
|
||||
+
|
||||
diff --git a/drivers/char/broadcom/Kconfig b/drivers/char/broadcom/Kconfig
|
||||
index 13d4fce859ac..48d29e5acb34 100644
|
||||
--- a/drivers/char/broadcom/Kconfig
|
||||
+++ b/drivers/char/broadcom/Kconfig
|
||||
@@ -24,3 +24,12 @@ config BCM2835_DEVGPIOMEM
|
||||
|
@ -126,17 +118,12 @@ index 13d4fce859ac..48d29e5acb34 100644
|
|||
+ This driver provides a character device interface (ioctl + read/write) to
|
||||
+ Broadcom's Secondary Memory interface. The low-level functionality is provided
|
||||
+ by the SMI driver itself.
|
||||
diff --git a/drivers/char/broadcom/Makefile b/drivers/char/broadcom/Makefile
|
||||
index c8747a4a11e7..a5d0f33221a3 100644
|
||||
--- a/drivers/char/broadcom/Makefile
|
||||
+++ b/drivers/char/broadcom/Makefile
|
||||
@@ -1,2 +1,3 @@
|
||||
obj-$(CONFIG_BCM2708_VCMEM) += vc_mem.o
|
||||
obj-$(CONFIG_BCM2835_DEVGPIOMEM)+= bcm2835-gpiomem.o
|
||||
+obj-$(CONFIG_BCM2835_SMI_DEV) += bcm2835_smi_dev.o
|
||||
diff --git a/drivers/char/broadcom/bcm2835_smi_dev.c b/drivers/char/broadcom/bcm2835_smi_dev.c
|
||||
new file mode 100644
|
||||
index 000000000000..9db8f1e3db0f
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/bcm2835_smi_dev.c
|
||||
@@ -0,0 +1,402 @@
|
||||
|
@ -542,8 +529,6 @@ index 000000000000..9db8f1e3db0f
|
|||
+MODULE_DESCRIPTION(
|
||||
+ "Character device driver for BCM2835's secondary memory interface");
|
||||
+MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
|
||||
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
|
||||
index 0f5a49fc7c9e..606331451466 100644
|
||||
--- a/drivers/misc/Kconfig
|
||||
+++ b/drivers/misc/Kconfig
|
||||
@@ -9,6 +9,14 @@ config SENSORS_LIS3LV02D
|
||||
|
@ -561,11 +546,9 @@ index 0f5a49fc7c9e..606331451466 100644
|
|||
config AD525X_DPOT
|
||||
tristate "Analog Devices Digital Potentiometers"
|
||||
depends on (I2C || SPI) && SYSFS
|
||||
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
|
||||
index a086197af544..e0188c30ffa8 100644
|
||||
--- a/drivers/misc/Makefile
|
||||
+++ b/drivers/misc/Makefile
|
||||
@@ -9,6 +9,7 @@ obj-$(CONFIG_AD525X_DPOT) += ad525x_dpot.o
|
||||
@@ -9,6 +9,7 @@ obj-$(CONFIG_AD525X_DPOT) += ad525x_dpot
|
||||
obj-$(CONFIG_AD525X_DPOT_I2C) += ad525x_dpot-i2c.o
|
||||
obj-$(CONFIG_AD525X_DPOT_SPI) += ad525x_dpot-spi.o
|
||||
obj-$(CONFIG_ATMEL_SSC) += atmel-ssc.o
|
||||
|
@ -573,9 +556,6 @@ index a086197af544..e0188c30ffa8 100644
|
|||
obj-$(CONFIG_DUMMY_IRQ) += dummy-irq.o
|
||||
obj-$(CONFIG_ICS932S401) += ics932s401.o
|
||||
obj-$(CONFIG_LKDTM) += lkdtm/
|
||||
diff --git a/drivers/misc/bcm2835_smi.c b/drivers/misc/bcm2835_smi.c
|
||||
new file mode 100644
|
||||
index 000000000000..f1a7f6a3e966
|
||||
--- /dev/null
|
||||
+++ b/drivers/misc/bcm2835_smi.c
|
||||
@@ -0,0 +1,955 @@
|
||||
|
@ -1534,9 +1514,6 @@ index 000000000000..f1a7f6a3e966
|
|||
+MODULE_LICENSE("GPL");
|
||||
+MODULE_DESCRIPTION("Device driver for BCM2835's secondary memory interface");
|
||||
+MODULE_AUTHOR("Luke Wren <luke@raspberrypi.org>");
|
||||
diff --git a/include/linux/broadcom/bcm2835_smi.h b/include/linux/broadcom/bcm2835_smi.h
|
||||
new file mode 100644
|
||||
index 000000000000..ee3a75edfc03
|
||||
--- /dev/null
|
||||
+++ b/include/linux/broadcom/bcm2835_smi.h
|
||||
@@ -0,0 +1,391 @@
|
||||
|
@ -1931,6 +1908,3 @@ index 000000000000..ee3a75edfc03
|
|||
+#endif /* BCM2835_SMI_IMPLEMENTATION */
|
||||
+
|
||||
+#endif /* BCM2835_SMI_H */
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From b464c0603d02e89ac233b65fd71f600c4caa34e5 Mon Sep 17 00:00:00 2001
|
||||
From 6fbae01f3e6978d72c06c8a0e3910f6b5eb20432 Mon Sep 17 00:00:00 2001
|
||||
From: popcornmix <popcornmix@gmail.com>
|
||||
Date: Wed, 17 Jun 2015 15:44:08 +0100
|
||||
Subject: [PATCH 083/634] Add Chris Boot's i2c driver
|
||||
Subject: [PATCH 075/828] Add Chris Boot's i2c driver
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -104,8 +104,6 @@ both bcm2708_bsc_fifo_fill and ~drain are changed as well.
|
|||
3 files changed, 533 insertions(+)
|
||||
create mode 100644 drivers/i2c/busses/i2c-bcm2708.c
|
||||
|
||||
diff --git a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig
|
||||
index e17790fe35a7..55597652bbb1 100644
|
||||
--- a/drivers/i2c/busses/Kconfig
|
||||
+++ b/drivers/i2c/busses/Kconfig
|
||||
@@ -9,6 +9,25 @@ menu "I2C Hardware Bus support"
|
||||
|
@ -134,8 +132,6 @@ index e17790fe35a7..55597652bbb1 100644
|
|||
config I2C_ALI1535
|
||||
tristate "ALI 1535"
|
||||
depends on PCI
|
||||
diff --git a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile
|
||||
index 1336b04f40e2..95fe417d63e3 100644
|
||||
--- a/drivers/i2c/busses/Makefile
|
||||
+++ b/drivers/i2c/busses/Makefile
|
||||
@@ -3,6 +3,8 @@
|
||||
|
@ -147,9 +143,6 @@ index 1336b04f40e2..95fe417d63e3 100644
|
|||
# ACPI drivers
|
||||
obj-$(CONFIG_I2C_SCMI) += i2c-scmi.o
|
||||
|
||||
diff --git a/drivers/i2c/busses/i2c-bcm2708.c b/drivers/i2c/busses/i2c-bcm2708.c
|
||||
new file mode 100644
|
||||
index 000000000000..962f2e5c7455
|
||||
--- /dev/null
|
||||
+++ b/drivers/i2c/busses/i2c-bcm2708.c
|
||||
@@ -0,0 +1,512 @@
|
||||
|
@ -665,6 +658,3 @@ index 000000000000..962f2e5c7455
|
|||
+MODULE_AUTHOR("Chris Boot <bootc@bootc.net>");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
+MODULE_ALIAS("platform:" DRV_NAME);
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 14ffde5320a15a12960942b29171637410752006 Mon Sep 17 00:00:00 2001
|
||||
From 68ccf6ea75ab03809b8063cade9ca17fdad303fe Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Fri, 26 Jun 2015 14:27:06 +0200
|
||||
Subject: [PATCH 084/634] char: broadcom: Add vcio module
|
||||
Subject: [PATCH 076/828] char: broadcom: Add vcio module
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -33,8 +33,6 @@ Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
|
|||
3 files changed, 201 insertions(+)
|
||||
create mode 100644 drivers/char/broadcom/vcio.c
|
||||
|
||||
diff --git a/drivers/char/broadcom/Kconfig b/drivers/char/broadcom/Kconfig
|
||||
index 48d29e5acb34..c11b834ccdbd 100644
|
||||
--- a/drivers/char/broadcom/Kconfig
|
||||
+++ b/drivers/char/broadcom/Kconfig
|
||||
@@ -15,6 +15,12 @@ config BCM2708_VCMEM
|
||||
|
@ -50,8 +48,6 @@ index 48d29e5acb34..c11b834ccdbd 100644
|
|||
endif
|
||||
|
||||
config BCM2835_DEVGPIOMEM
|
||||
diff --git a/drivers/char/broadcom/Makefile b/drivers/char/broadcom/Makefile
|
||||
index a5d0f33221a3..ea7495b01c28 100644
|
||||
--- a/drivers/char/broadcom/Makefile
|
||||
+++ b/drivers/char/broadcom/Makefile
|
||||
@@ -1,3 +1,4 @@
|
||||
|
@ -59,9 +55,6 @@ index a5d0f33221a3..ea7495b01c28 100644
|
|||
+obj-$(CONFIG_BCM_VCIO) += vcio.o
|
||||
obj-$(CONFIG_BCM2835_DEVGPIOMEM)+= bcm2835-gpiomem.o
|
||||
obj-$(CONFIG_BCM2835_SMI_DEV) += bcm2835_smi_dev.o
|
||||
diff --git a/drivers/char/broadcom/vcio.c b/drivers/char/broadcom/vcio.c
|
||||
new file mode 100644
|
||||
index 000000000000..d2598663a2b5
|
||||
--- /dev/null
|
||||
+++ b/drivers/char/broadcom/vcio.c
|
||||
@@ -0,0 +1,194 @@
|
||||
|
@ -259,6 +252,3 @@ index 000000000000..d2598663a2b5
|
|||
+MODULE_AUTHOR("Noralf Trønnes");
|
||||
+MODULE_DESCRIPTION("Mailbox userspace access");
|
||||
+MODULE_LICENSE("GPL");
|
||||
--
|
||||
2.33.1
|
||||
|
|
@ -1,7 +1,7 @@
|
|||
From 48748dbf488a3a17297d54fefcddc5a477a1842f Mon Sep 17 00:00:00 2001
|
||||
From c1888f14e25039752859be495bce70265f60bca2 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Noralf=20Tr=C3=B8nnes?= <noralf@tronnes.org>
|
||||
Date: Fri, 26 Jun 2015 14:25:01 +0200
|
||||
Subject: [PATCH 085/634] firmware: bcm2835: Support ARCH_BCM270x
|
||||
Subject: [PATCH 077/828] firmware: bcm2835: Support ARCH_BCM270x
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
@ -25,8 +25,6 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
|
|||
drivers/firmware/raspberrypi.c | 17 ++++++++++++++++-
|
||||
1 file changed, 16 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/drivers/firmware/raspberrypi.c b/drivers/firmware/raspberrypi.c
|
||||
index 4b8978b254f9..54619623fe86 100644
|
||||
--- a/drivers/firmware/raspberrypi.c
|
||||
+++ b/drivers/firmware/raspberrypi.c
|
||||
@@ -32,6 +32,8 @@ struct rpi_firmware {
|
||||
|
@ -38,7 +36,7 @@ index 4b8978b254f9..54619623fe86 100644
|
|||
static DEFINE_MUTEX(transaction_lock);
|
||||
|
||||
static void response_callback(struct mbox_client *cl, void *msg)
|
||||
@@ -279,6 +281,7 @@ static int rpi_firmware_probe(struct platform_device *pdev)
|
||||
@@ -279,6 +281,7 @@ static int rpi_firmware_probe(struct pla
|
||||
kref_init(&fw->consumers);
|
||||
|
||||
platform_set_drvdata(pdev, fw);
|
||||
|
@ -46,7 +44,7 @@ index 4b8978b254f9..54619623fe86 100644
|
|||
|
||||
rpi_firmware_print_firmware_revision(fw);
|
||||
rpi_register_hwmon_driver(dev, fw);
|
||||
@@ -307,6 +310,7 @@ static int rpi_firmware_remove(struct platform_device *pdev)
|
||||
@@ -307,6 +310,7 @@ static int rpi_firmware_remove(struct pl
|
||||
rpi_clk = NULL;
|
||||
|
||||
rpi_firmware_put(fw);
|
||||
|
@ -54,7 +52,7 @@ index 4b8978b254f9..54619623fe86 100644
|
|||
|
||||
return 0;
|
||||
}
|
||||
@@ -381,7 +385,18 @@ static struct platform_driver rpi_firmware_driver = {
|
||||
@@ -381,7 +385,18 @@ static struct platform_driver rpi_firmwa
|
||||
.shutdown = rpi_firmware_shutdown,
|
||||
.remove = rpi_firmware_remove,
|
||||
};
|
||||
|
@ -74,6 +72,3 @@ index 4b8978b254f9..54619623fe86 100644
|
|||
|
||||
MODULE_AUTHOR("Eric Anholt <eric@anholt.net>");
|
||||
MODULE_DESCRIPTION("Raspberry Pi firmware driver");
|
||||
--
|
||||
2.33.1
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue