aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/brcm2708
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/brcm2708')
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0002-smsx95xx-fix-crimes-against-truesize.patch4
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0016-dmaengine-bcm2835-Load-driver-early-and-support-lega.patch8
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0037-Add-dwc_otg-driver.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0056-fbdev-add-FBIOCOPYAREA-ioctl.patch8
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0131-drm-vc4-Fix-pitch-setup-for-T-format-scanout.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0174-drm-vc4-Add-the-DRM_IOCTL_VC4_GEM_MADVISE-ioctl.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0344-drm-vc4-Set-premultiplied-for-alpha-formats.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0345-drm-vc4-Check-if-plane-requires-background-fill.patch4
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0354-drm-vc4-Advertise-supported-modifiers-for-planes.patch8
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0356-drm-vc4-Add-missing-formats-to-vc4_format_mod_suppor.patch2
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0357-drm-vc4-Add-support-for-SAND-modifier.patch14
-rw-r--r--target/linux/brcm2708/patches-4.14/950-0434-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch50
13 files changed, 29 insertions, 79 deletions
diff --git a/target/linux/brcm2708/patches-4.14/950-0002-smsx95xx-fix-crimes-against-truesize.patch b/target/linux/brcm2708/patches-4.14/950-0002-smsx95xx-fix-crimes-against-truesize.patch
index 0dd2c7ce35..52999a9bd0 100644
--- a/target/linux/brcm2708/patches-4.14/950-0002-smsx95xx-fix-crimes-against-truesize.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0002-smsx95xx-fix-crimes-against-truesize.patch
@@ -25,7 +25,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
static int __must_check __smsc95xx_read_reg(struct usbnet *dev, u32 index,
u32 *data, int in_pm)
{
-@@ -1971,7 +1975,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1972,7 +1976,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 */
@@ -35,7 +35,7 @@ Signed-off-by: Steve Glendinning <steve.glendinning@smsc.com>
return 1;
}
-@@ -1989,7 +1994,8 @@ static int smsc95xx_rx_fixup(struct usbn
+@@ -1990,7 +1995,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 */
diff --git a/target/linux/brcm2708/patches-4.14/950-0016-dmaengine-bcm2835-Load-driver-early-and-support-lega.patch b/target/linux/brcm2708/patches-4.14/950-0016-dmaengine-bcm2835-Load-driver-early-and-support-lega.patch
index bb14791bad..8c5821575c 100644
--- a/target/linux/brcm2708/patches-4.14/950-0016-dmaengine-bcm2835-Load-driver-early-and-support-lega.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0016-dmaengine-bcm2835-Load-driver-early-and-support-lega.patch
@@ -47,7 +47,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
struct bcm2835_dmadev {
struct dma_device ddev;
-@@ -925,6 +927,9 @@ static int bcm2835_dma_probe(struct plat
+@@ -905,6 +907,9 @@ static int bcm2835_dma_probe(struct plat
base = devm_ioremap_resource(&pdev->dev, res);
if (IS_ERR(base))
return PTR_ERR(base);
@@ -57,7 +57,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
od->base = base;
-@@ -962,6 +967,9 @@ static int bcm2835_dma_probe(struct plat
+@@ -942,6 +947,9 @@ static int bcm2835_dma_probe(struct plat
goto err_no_dma;
}
@@ -67,7 +67,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
/* get irqs for each channel that we support */
for (i = 0; i <= BCM2835_DMA_MAX_DMA_CHAN_SUPPORTED; i++) {
/* skip masked out channels */
-@@ -1036,6 +1044,7 @@ static int bcm2835_dma_remove(struct pla
+@@ -1016,6 +1024,7 @@ static int bcm2835_dma_remove(struct pla
{
struct bcm2835_dmadev *od = platform_get_drvdata(pdev);
@@ -75,7 +75,7 @@ Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
dma_async_device_unregister(&od->ddev);
bcm2835_dma_free(od);
-@@ -1051,7 +1060,22 @@ static struct platform_driver bcm2835_dm
+@@ -1031,7 +1040,22 @@ static struct platform_driver bcm2835_dm
},
};
diff --git a/target/linux/brcm2708/patches-4.14/950-0037-Add-dwc_otg-driver.patch b/target/linux/brcm2708/patches-4.14/950-0037-Add-dwc_otg-driver.patch
index 49a291702f..f11406ed57 100644
--- a/target/linux/brcm2708/patches-4.14/950-0037-Add-dwc_otg-driver.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0037-Add-dwc_otg-driver.patch
@@ -841,7 +841,7 @@ Signed-off-by: Malik Olivier Boussejra <malik@boussejra.com>
}
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
-@@ -5084,7 +5084,7 @@ static void port_event(struct usb_hub *h
+@@ -5094,7 +5094,7 @@ static void port_event(struct usb_hub *h
if (portchange & USB_PORT_STAT_C_OVERCURRENT) {
u16 status = 0, unused;
diff --git a/target/linux/brcm2708/patches-4.14/950-0056-fbdev-add-FBIOCOPYAREA-ioctl.patch b/target/linux/brcm2708/patches-4.14/950-0056-fbdev-add-FBIOCOPYAREA-ioctl.patch
index b01c2203e1..dd41f5d44e 100644
--- a/target/linux/brcm2708/patches-4.14/950-0056-fbdev-add-FBIOCOPYAREA-ioctl.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0056-fbdev-add-FBIOCOPYAREA-ioctl.patch
@@ -170,7 +170,7 @@ bcm2708_fb: Add ioctl for reading gpu memory through dma
platform_set_drvdata(dev, fb);
--- a/drivers/video/fbdev/core/fbmem.c
+++ b/drivers/video/fbdev/core/fbmem.c
-@@ -1086,6 +1086,31 @@ fb_blank(struct fb_info *info, int blank
+@@ -1090,6 +1090,31 @@ fb_blank(struct fb_info *info, int blank
}
EXPORT_SYMBOL(fb_blank);
@@ -202,7 +202,7 @@ bcm2708_fb: Add ioctl for reading gpu memory through dma
static long do_fb_ioctl(struct fb_info *info, unsigned int cmd,
unsigned long arg)
{
-@@ -1096,6 +1121,7 @@ static long do_fb_ioctl(struct fb_info *
+@@ -1100,6 +1125,7 @@ static long do_fb_ioctl(struct fb_info *
struct fb_cmap cmap_from;
struct fb_cmap_user cmap;
struct fb_event event;
@@ -210,7 +210,7 @@ bcm2708_fb: Add ioctl for reading gpu memory through dma
void __user *argp = (void __user *)arg;
long ret = 0;
-@@ -1213,6 +1239,15 @@ static long do_fb_ioctl(struct fb_info *
+@@ -1217,6 +1243,15 @@ static long do_fb_ioctl(struct fb_info *
unlock_fb_info(info);
console_unlock();
break;
@@ -226,7 +226,7 @@ bcm2708_fb: Add ioctl for reading gpu memory through dma
default:
if (!lock_fb_info(info))
return -ENODEV;
-@@ -1358,6 +1393,7 @@ static long fb_compat_ioctl(struct file
+@@ -1362,6 +1397,7 @@ static long fb_compat_ioctl(struct file
case FBIOPAN_DISPLAY:
case FBIOGET_CON2FBMAP:
case FBIOPUT_CON2FBMAP:
diff --git a/target/linux/brcm2708/patches-4.14/950-0131-drm-vc4-Fix-pitch-setup-for-T-format-scanout.patch b/target/linux/brcm2708/patches-4.14/950-0131-drm-vc4-Fix-pitch-setup-for-T-format-scanout.patch
index 1b140f0a60..98b7ba2872 100644
--- a/target/linux/brcm2708/patches-4.14/950-0131-drm-vc4-Fix-pitch-setup-for-T-format-scanout.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0131-drm-vc4-Fix-pitch-setup-for-T-format-scanout.patch
@@ -16,7 +16,7 @@ Fixes: 98830d91da08 ("drm/vc4: Add T-format scanout support.")
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -547,14 +547,24 @@ static int vc4_plane_mode_set(struct drm
+@@ -549,14 +549,24 @@ static int vc4_plane_mode_set(struct drm
tiling = SCALER_CTL0_TILING_LINEAR;
pitch0 = VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH);
break;
diff --git a/target/linux/brcm2708/patches-4.14/950-0174-drm-vc4-Add-the-DRM_IOCTL_VC4_GEM_MADVISE-ioctl.patch b/target/linux/brcm2708/patches-4.14/950-0174-drm-vc4-Add-the-DRM_IOCTL_VC4_GEM_MADVISE-ioctl.patch
index 995c2c0db2..0e410c484c 100644
--- a/target/linux/brcm2708/patches-4.14/950-0174-drm-vc4-Add-the-DRM_IOCTL_VC4_GEM_MADVISE-ioctl.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0174-drm-vc4-Add-the-DRM_IOCTL_VC4_GEM_MADVISE-ioctl.patch
@@ -778,7 +778,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20171019125748.3152-1-boris.
#include "vc4_drv.h"
#include "vc4_regs.h"
-@@ -777,21 +778,40 @@ static int vc4_prepare_fb(struct drm_pla
+@@ -779,21 +780,40 @@ static int vc4_prepare_fb(struct drm_pla
{
struct vc4_bo *bo;
struct dma_fence *fence;
diff --git a/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch b/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch
index 9e067686b0..d9f3e3deb0 100644
--- a/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0181-drm-vc4-Use-.pixel_order-instead-of-custom-.flip_cbc.patch
@@ -66,7 +66,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/563872b69c1e5df142cb15ebfca7
},
};
-@@ -625,15 +628,8 @@ static int vc4_plane_mode_set(struct drm
+@@ -627,15 +630,8 @@ static int vc4_plane_mode_set(struct drm
* The pointers may be any byte address.
*/
vc4_state->ptr0_offset = vc4_state->dlist_count;
diff --git a/target/linux/brcm2708/patches-4.14/950-0344-drm-vc4-Set-premultiplied-for-alpha-formats.patch b/target/linux/brcm2708/patches-4.14/950-0344-drm-vc4-Set-premultiplied-for-alpha-formats.patch
index 9abfa14619..af7396910c 100644
--- a/target/linux/brcm2708/patches-4.14/950-0344-drm-vc4-Set-premultiplied-for-alpha-formats.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0344-drm-vc4-Set-premultiplied-for-alpha-formats.patch
@@ -22,7 +22,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-2-git-send-
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -619,13 +619,14 @@ static int vc4_plane_mode_set(struct drm
+@@ -621,13 +621,14 @@ static int vc4_plane_mode_set(struct drm
SCALER_POS1_SCL_HEIGHT));
}
diff --git a/target/linux/brcm2708/patches-4.14/950-0345-drm-vc4-Check-if-plane-requires-background-fill.patch b/target/linux/brcm2708/patches-4.14/950-0345-drm-vc4-Check-if-plane-requires-background-fill.patch
index 6eaae48b0f..778fe67630 100644
--- a/target/linux/brcm2708/patches-4.14/950-0345-drm-vc4-Check-if-plane-requires-background-fill.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0345-drm-vc4-Check-if-plane-requires-background-fill.patch
@@ -36,7 +36,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-3-git-send-
};
static inline struct vc4_plane_state *
-@@ -522,6 +528,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -524,6 +530,7 @@ static int vc4_plane_mode_set(struct drm
u32 ctl0_offset = vc4_state->dlist_count;
const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
int num_planes = drm_format_num_planes(format->drm);
@@ -44,7 +44,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/1520556817-97297-3-git-send-
u32 scl0, scl1, pitch0;
u32 lbm_size, tiling;
unsigned long irqflags;
-@@ -705,6 +712,16 @@ static int vc4_plane_mode_set(struct drm
+@@ -707,6 +714,16 @@ static int vc4_plane_mode_set(struct drm
vc4_state->dlist[ctl0_offset] |=
VC4_SET_FIELD(vc4_state->dlist_count, SCALER_CTL0_SIZE);
diff --git a/target/linux/brcm2708/patches-4.14/950-0354-drm-vc4-Advertise-supported-modifiers-for-planes.patch b/target/linux/brcm2708/patches-4.14/950-0354-drm-vc4-Advertise-supported-modifiers-for-planes.patch
index 95d2402493..c48c6124bc 100644
--- a/target/linux/brcm2708/patches-4.14/950-0354-drm-vc4-Advertise-supported-modifiers-for-planes.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0354-drm-vc4-Advertise-supported-modifiers-for-planes.patch
@@ -33,7 +33,7 @@ Link: https://patchwork.freedesktop.org/patch/170828/
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -868,6 +868,32 @@ out:
+@@ -870,6 +870,32 @@ out:
ctx);
}
@@ -66,7 +66,7 @@ Link: https://patchwork.freedesktop.org/patch/170828/
static const struct drm_plane_funcs vc4_plane_funcs = {
.update_plane = vc4_update_plane,
.disable_plane = drm_atomic_helper_disable_plane,
-@@ -876,6 +902,7 @@ static const struct drm_plane_funcs vc4_
+@@ -878,6 +904,7 @@ static const struct drm_plane_funcs vc4_
.reset = vc4_plane_reset,
.atomic_duplicate_state = vc4_plane_duplicate_state,
.atomic_destroy_state = vc4_plane_destroy_state,
@@ -74,7 +74,7 @@ Link: https://patchwork.freedesktop.org/patch/170828/
};
struct drm_plane *vc4_plane_init(struct drm_device *dev,
-@@ -887,6 +914,11 @@ struct drm_plane *vc4_plane_init(struct
+@@ -889,6 +916,11 @@ struct drm_plane *vc4_plane_init(struct
u32 num_formats = 0;
int ret = 0;
unsigned i;
@@ -86,7 +86,7 @@ Link: https://patchwork.freedesktop.org/patch/170828/
vc4_plane = devm_kzalloc(dev->dev, sizeof(*vc4_plane),
GFP_KERNEL);
-@@ -907,7 +939,7 @@ struct drm_plane *vc4_plane_init(struct
+@@ -909,7 +941,7 @@ struct drm_plane *vc4_plane_init(struct
ret = drm_universal_plane_init(dev, plane, 0,
&vc4_plane_funcs,
formats, num_formats,
diff --git a/target/linux/brcm2708/patches-4.14/950-0356-drm-vc4-Add-missing-formats-to-vc4_format_mod_suppor.patch b/target/linux/brcm2708/patches-4.14/950-0356-drm-vc4-Add-missing-formats-to-vc4_format_mod_suppor.patch
index 4bed2925a7..36337d1fbf 100644
--- a/target/linux/brcm2708/patches-4.14/950-0356-drm-vc4-Add-missing-formats-to-vc4_format_mod_suppor.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0356-drm-vc4-Add-missing-formats-to-vc4_format_mod_suppor.patch
@@ -21,7 +21,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-2-eric@
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -888,7 +888,9 @@ static bool vc4_format_mod_supported(str
+@@ -890,7 +890,9 @@ static bool vc4_format_mod_supported(str
case DRM_FORMAT_YUV420:
case DRM_FORMAT_YVU420:
case DRM_FORMAT_NV12:
diff --git a/target/linux/brcm2708/patches-4.14/950-0357-drm-vc4-Add-support-for-SAND-modifier.patch b/target/linux/brcm2708/patches-4.14/950-0357-drm-vc4-Add-support-for-SAND-modifier.patch
index fbe7261601..b4ab22c884 100644
--- a/target/linux/brcm2708/patches-4.14/950-0357-drm-vc4-Add-support-for-SAND-modifier.patch
+++ b/target/linux/brcm2708/patches-4.14/950-0357-drm-vc4-Add-support-for-SAND-modifier.patch
@@ -32,7 +32,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
--- a/drivers/gpu/drm/vc4/vc4_plane.c
+++ b/drivers/gpu/drm/vc4/vc4_plane.c
-@@ -467,11 +467,13 @@ static int vc4_plane_mode_set(struct drm
+@@ -469,11 +469,13 @@ static int vc4_plane_mode_set(struct drm
struct drm_framebuffer *fb = state->fb;
u32 ctl0_offset = vc4_state->dlist_count;
const struct hvs_format *format = vc4_get_hvs_format(fb->format->format);
@@ -46,7 +46,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
int ret, i;
ret = vc4_plane_setup_clipping_and_scaling(state);
-@@ -511,7 +513,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -513,7 +515,7 @@ static int vc4_plane_mode_set(struct drm
scl1 = vc4_get_scl_field(state, 0);
}
@@ -55,7 +55,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
case DRM_FORMAT_MOD_LINEAR:
tiling = SCALER_CTL0_TILING_LINEAR;
pitch0 = VC4_SET_FIELD(fb->pitches[0], SCALER_SRC_PITCH);
-@@ -534,6 +536,49 @@ static int vc4_plane_mode_set(struct drm
+@@ -536,6 +538,49 @@ static int vc4_plane_mode_set(struct drm
break;
}
@@ -105,7 +105,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
default:
DRM_DEBUG_KMS("Unsupported FB tiling flag 0x%16llx",
(long long)fb->modifier);
-@@ -544,7 +589,7 @@ static int vc4_plane_mode_set(struct drm
+@@ -546,7 +591,7 @@ static int vc4_plane_mode_set(struct drm
vc4_dlist_write(vc4_state,
SCALER_CTL0_VALID |
(format->pixel_order << SCALER_CTL0_ORDER_SHIFT) |
@@ -114,7 +114,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
VC4_SET_FIELD(tiling, SCALER_CTL0_TILING) |
(vc4_state->is_unity ? SCALER_CTL0_UNITY : 0) |
VC4_SET_FIELD(scl0, SCALER_CTL0_SCL0) |
-@@ -598,8 +643,13 @@ static int vc4_plane_mode_set(struct drm
+@@ -600,8 +645,13 @@ static int vc4_plane_mode_set(struct drm
/* Pitch word 1/2 */
for (i = 1; i < num_planes; i++) {
@@ -130,7 +130,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
}
/* Colorspace conversion words */
-@@ -882,13 +932,30 @@ static bool vc4_format_mod_supported(str
+@@ -884,13 +934,30 @@ static bool vc4_format_mod_supported(str
case DRM_FORMAT_BGR565:
case DRM_FORMAT_ARGB1555:
case DRM_FORMAT_XRGB1555:
@@ -164,7 +164,7 @@ Link: https://patchwork.freedesktop.org/patch/msgid/20180316220435.31416-3-eric@
case DRM_FORMAT_NV16:
case DRM_FORMAT_NV61:
default:
-@@ -918,6 +985,9 @@ struct drm_plane *vc4_plane_init(struct
+@@ -920,6 +987,9 @@ struct drm_plane *vc4_plane_init(struct
unsigned i;
static const uint64_t modifiers[] = {
DRM_FORMAT_MOD_BROADCOM_VC4_T_TILED,
diff --git a/target/linux/brcm2708/patches-4.14/950-0434-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch b/target/linux/brcm2708/patches-4.14/950-0434-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch
deleted file mode 100644
index 9a9e811038..0000000000
--- a/target/linux/brcm2708/patches-4.14/950-0434-mmc-bcm2835-Recover-from-MMC_SEND_EXT_CSD.patch
+++ /dev/null
@@ -1,50 +0,0 @@
-From c2eae29f6503cf29ac6a204c51132cfed33d203e Mon Sep 17 00:00:00 2001
-From: Phil Elwell <phil@raspberrypi.org>
-Date: Fri, 26 Oct 2018 17:40:44 +0100
-Subject: [PATCH 434/454] mmc/bcm2835: Recover from MMC_SEND_EXT_CSD
-
-If the user issues an "mmc extcsd read", the SD controller receives
-what it thinks is a SEND_IF_COND command with an unexpected data block.
-The resulting operations leave the FSM stuck in READWAIT, a state which
-persists until the MMC framework resets the controller, by which point
-the root filesystem is likely to have been unmounted.
-
-A less heavyweight solution is to detect the condition and nudge the
-FSM by asserting the (self-clearing) FORCE_DATA_MODE bit.
-
-N.B. This workaround was essentially discovered by accident and without
-a full understanding the inner workings of the controller, so it is
-fortunate that the "fix" only modifies error paths.
-
-See: https://github.com/raspberrypi/linux/issues/2728
-
-Signed-off-by: Phil Elwell <phil@raspberrypi.org>
----
- drivers/mmc/host/bcm2835.c | 9 +++++++++
- 1 file changed, 9 insertions(+)
-
---- a/drivers/mmc/host/bcm2835.c
-+++ b/drivers/mmc/host/bcm2835.c
-@@ -772,6 +772,8 @@ static void bcm2835_finish_command(struc
-
- if (!(sdhsts & SDHSTS_CRC7_ERROR) ||
- (host->cmd->opcode != MMC_SEND_OP_COND)) {
-+ u32 edm, fsm;
-+
- if (sdhsts & SDHSTS_CMD_TIME_OUT) {
- host->cmd->error = -ETIMEDOUT;
- } else {
-@@ -780,6 +782,13 @@ static void bcm2835_finish_command(struc
- bcm2835_dumpregs(host);
- host->cmd->error = -EILSEQ;
- }
-+ edm = readl(host->ioaddr + SDEDM);
-+ fsm = edm & SDEDM_FSM_MASK;
-+ if (fsm == SDEDM_FSM_READWAIT ||
-+ fsm == SDEDM_FSM_WRITESTART1)
-+ /* Kick the FSM out of its wait */
-+ writel(edm | SDEDM_FORCE_DATA_MODE,
-+ host->ioaddr + SDEDM);
- bcm2835_finish_request(host);
- return;
- }