1
0
mirror of https://git.yoctoproject.org/meta-ti synced 2026-05-07 03:49:20 +00:00

linux-ti335x-psp 3.1: backport some PSP patches, add beaglebone bootlogo

Signed-off-by: Koen Kooi <koen@dominion.thruhere.net>
This commit is contained in:
Koen Kooi
2011-11-10 13:02:57 +01:00
parent 0194f1b289
commit 0839c9df6a
8 changed files with 689 additions and 179 deletions
@@ -0,0 +1,263 @@
From 29e73e40f5bda71f16ada687015545c79d005e34 Mon Sep 17 00:00:00 2001
From: Ajay Kumar Gupta <ajay.gupta@ti.com>
Date: Wed, 2 Nov 2011 11:15:40 +0530
Subject: [PATCH 1/5] usb: musb_core: kill all global and static variables
This needed for dual instances support.
Changes include:
- Move fifo_mode, orig_dma_mask, otg_timer, first to musb struct
- Killed option for use_dma
---
drivers/usb/musb/musb_core.c | 80 +++++++++++++-----------------------------
drivers/usb/musb/musb_core.h | 7 ++++
2 files changed, 32 insertions(+), 55 deletions(-)
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 16eec45..86232ae 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -399,8 +399,6 @@ void musb_otg_timer_func(unsigned long data)
spin_unlock_irqrestore(&musb->lock, flags);
}
-static DEFINE_TIMER(musb_otg_timer, musb_otg_timer_func, 0, 0);
-
/*
* Stops the B-device HNP state. Caller must take care of locking.
*/
@@ -664,8 +662,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
if (musb->is_active) {
musb->xceiv->state = OTG_STATE_B_WAIT_ACON;
dev_dbg(musb->controller, "HNP: Setting timer for b_ase0_brst\n");
- musb_otg_timer.data = (unsigned long)musb;
- mod_timer(&musb_otg_timer, jiffies
+ mod_timer(&musb->otg_timer, jiffies
+ msecs_to_jiffies(TB_ASE0_BRST));
}
break;
@@ -826,8 +823,7 @@ static irqreturn_t musb_stage0_irq(struct musb *musb, u8 int_usb,
case OTG_STATE_A_WAIT_BCON: /* OPT TD.4.7-900ms */
dev_dbg(musb->controller, "HNP: Setting timer as %s\n",
otg_state_string(musb->xceiv->state));
- musb_otg_timer.data = (unsigned long)musb;
- mod_timer(&musb_otg_timer, jiffies
+ mod_timer(&musb->otg_timer, jiffies
+ msecs_to_jiffies(100));
break;
case OTG_STATE_A_PERIPHERAL:
@@ -1024,22 +1020,6 @@ static void musb_shutdown(struct platform_device *pdev)
/*-------------------------------------------------------------------------*/
/*
- * The silicon either has hard-wired endpoint configurations, or else
- * "dynamic fifo" sizing. The driver has support for both, though at this
- * writing only the dynamic sizing is very well tested. Since we switched
- * away from compile-time hardware parameters, we can no longer rely on
- * dead code elimination to leave only the relevant one in the object file.
- *
- * We don't currently use dynamic fifo setup capability to do anything
- * more than selecting one of a bunch of predefined configurations.
- */
-static short __devinitdata fifo_mode = -1;
-
-/* "modprobe ... fifo_mode=1" etc */
-module_param(fifo_mode, short, 0);
-MODULE_PARM_DESC(fifo_mode, "initial endpoint configuration");
-
-/*
* tables defining fifo_mode values. define more if you like.
* for host side, make sure both halves of ep1 are set up.
*/
@@ -1253,7 +1233,7 @@ fifo_setup(struct musb *musb, struct musb_hw_ep *hw_ep,
return offset + (maxpacket << ((c_size & MUSB_FIFOSZ_DPB) ? 1 : 0));
}
- static struct musb_fifo_cfg __devinitdata ep0_cfg = {
+static struct musb_fifo_cfg __devinitdata ep0_cfg = {
.style = FIFO_RXTX, .maxpacket = 64,
};
@@ -1265,16 +1245,16 @@ static int __devinit ep_config_from_table(struct musb *musb)
struct musb_hw_ep *hw_ep = musb->endpoints;
if (musb->config->fifo_mode)
- fifo_mode = musb->config->fifo_mode;
+ musb->fifo_mode = musb->config->fifo_mode;
else if (musb->config->fifo_cfg) {
cfg = musb->config->fifo_cfg;
n = musb->config->fifo_cfg_size;
goto done;
}
- switch (fifo_mode) {
+ switch (musb->fifo_mode) {
default:
- fifo_mode = 0;
+ musb->fifo_mode = 0;
/* FALLTHROUGH */
case 0:
cfg = mode_0_cfg;
@@ -1307,7 +1287,7 @@ static int __devinit ep_config_from_table(struct musb *musb)
}
printk(KERN_DEBUG "%s: setup fifo_mode %d\n",
- musb_driver_name, fifo_mode);
+ musb_driver_name, musb->fifo_mode);
done:
@@ -1642,12 +1622,6 @@ irqreturn_t musb_interrupt(struct musb *musb)
EXPORT_SYMBOL_GPL(musb_interrupt);
#ifndef CONFIG_MUSB_PIO_ONLY
-static int __devinitdata use_dma = 1;
-
-/* "modprobe ... use_dma=0" etc */
-module_param(use_dma, bool, 0);
-MODULE_PARM_DESC(use_dma, "enable/disable use of DMA");
-
void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit)
{
u8 devctl = musb_readb(musb->mregs, MUSB_DEVCTL);
@@ -1686,9 +1660,6 @@ void musb_dma_completion(struct musb *musb, u8 epnum, u8 transmit)
}
}
EXPORT_SYMBOL_GPL(musb_dma_completion);
-
-#else
-#define use_dma 0
#endif
/*-------------------------------------------------------------------------*/
@@ -1813,10 +1784,9 @@ static const struct attribute_group musb_attr_group = {
static void musb_irq_work(struct work_struct *data)
{
struct musb *musb = container_of(data, struct musb, irq_work);
- static int old_state;
- if (musb->xceiv->state != old_state) {
- old_state = musb->xceiv->state;
+ if (musb->xceiv->state != musb->old_state) {
+ musb->old_state = musb->xceiv->state;
sysfs_notify(&musb->controller->kobj, NULL, "mode");
}
}
@@ -1895,6 +1865,8 @@ static void musb_free(struct musb *musb)
if (musb->gb_queue)
destroy_workqueue(musb->gb_queue);
+ del_timer_sync(&musb->otg_timer);
+
kfree(musb);
}
@@ -1943,10 +1915,13 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl,
musb->min_power = plat->min_power;
musb->ops = plat->platform_ops;
musb->id = pdev->id;
+ musb->first = 1;
- if (fifo_mode == -1)
- fifo_mode = musb->ops->fifo_mode;
+ musb->fifo_mode = musb->ops->fifo_mode;
+#ifndef CONFIG_MUSB_PIO_ONLY
+ musb->orig_dma_mask = dev->dma_mask;
+#endif
if (musb->ops->flags & MUSB_GLUE_TUSB_STYLE) {
musb_readb = __tusb_musb_readb;
musb_writeb = __tusb_musb_writeb;
@@ -1984,7 +1959,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl,
}
#ifndef CONFIG_MUSB_PIO_ONLY
- if (use_dma && dev->dma_mask) {
+ if (dev->dma_mask) {
struct dma_controller *c;
if (!musb->ops->dma_controller_create) {
@@ -2123,6 +2098,9 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl,
/* Init giveback workqueue */
INIT_WORK(&musb->gb_work, musb_gb_work);
+ /* setup otg_timer */
+ setup_timer(&musb->otg_timer, musb_otg_timer_func,
+ (unsigned long) musb);
return 0;
fail6:
@@ -2159,11 +2137,6 @@ fail0:
/* all implementations (PCI bridge to FPGA, VLYNQ, etc) should just
* bridge to a platform device; this driver then suffices.
*/
-
-#ifndef CONFIG_MUSB_PIO_ONLY
-static u64 *orig_dma_mask;
-#endif
-
static int __devinit musb_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
@@ -2196,10 +2169,6 @@ static int __devinit musb_probe(struct platform_device *pdev)
return -ENOMEM;
}
-#ifndef CONFIG_MUSB_PIO_ONLY
- /* clobbered by use_dma=n */
- orig_dma_mask = dev->dma_mask;
-#endif
status = musb_init_controller(dev, irq, base, iomem->start);
if (status < 0)
iounmap(base);
@@ -2229,7 +2198,7 @@ static int __exit musb_remove(struct platform_device *pdev)
iounmap(ctrl_base);
device_init_wakeup(&pdev->dev, 0);
#ifndef CONFIG_MUSB_PIO_ONLY
- pdev->dev.dma_mask = orig_dma_mask;
+ pdev->dev.dma_mask = musb->orig_dma_mask;
#endif
return 0;
}
@@ -2441,7 +2410,6 @@ static int musb_runtime_suspend(struct device *dev)
static int musb_runtime_resume(struct device *dev)
{
struct musb *musb = dev_to_musb(dev);
- static int first = 1;
/*
* When pm_runtime_get_sync called for the first time in driver
@@ -2452,9 +2420,11 @@ static int musb_runtime_resume(struct device *dev)
* Also context restore without save does not make
* any sense
*/
- if (!first)
+ if (musb->first)
+ musb->first = 0;
+ else
musb_restore_context(musb);
- first = 0;
+
return 0;
}
diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h
index 919d43b..a34886f 100644
--- a/drivers/usb/musb/musb_core.h
+++ b/drivers/usb/musb/musb_core.h
@@ -464,6 +464,13 @@ struct musb {
u8 id;
struct timer_list otg_workaround;
unsigned long last_timer;
+ int first;
+ int old_state;
+ struct timer_list otg_timer;
+#ifndef CONFIG_MUSB_PIO_ONLY
+ u64 *orig_dma_mask;
+#endif
+ short fifo_mode;
};
static inline struct musb *gadget_to_musb(struct usb_gadget *g)
--
1.7.2.5
@@ -0,0 +1,28 @@
From 1fff5fde3f5b2d167d5c51f9e7cf316fbd79886f Mon Sep 17 00:00:00 2001
From: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Date: Tue, 8 Nov 2011 18:54:44 +0530
Subject: [PATCH 2/5] arm:omap:am335x: correct 32KHz clk rate
correct 32KHz clk (Divide down of PER PLL output) from 32678 to 32768
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
---
arch/arm/mach-omap2/clock33xx_data.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mach-omap2/clock33xx_data.c b/arch/arm/mach-omap2/clock33xx_data.c
index 6763c59..f121196 100644
--- a/arch/arm/mach-omap2/clock33xx_data.c
+++ b/arch/arm/mach-omap2/clock33xx_data.c
@@ -44,7 +44,7 @@ void am33xx_init_timer_parent(struct clk *clk)
static struct clk clk_32768_ck = {
.name = "clk_32768_ck",
- .rate = 32678,
+ .rate = 32768,
.ops = &clkops_null,
};
--
1.7.2.5
@@ -0,0 +1,47 @@
From c5b1ff5857e590f50b4276d4de8e34fbcdc4dfb9 Mon Sep 17 00:00:00 2001
From: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Date: Mon, 24 Oct 2011 15:59:37 +0530
Subject: [PATCH 3/5] arm:omap:mcspi: correct memory range when requesting regions
Current McSPI driver 1st requests memory regions & later adds register
offset. This causes warning when during module removal as below.
root@arago-armv7:~# rmmod -v /lib/modules/3.1.0-rc8/spi-omap2-mcspi.ko
rmmod spi_omap2_mcspi, wait=no
[ 42.472810] Trying to free nonexistent resource
<00000000481a0100-00000000481a04ff>
[ 42.519178] Trying to free nonexistent resource
<0000000048030100-00000000480304ff>
This patch moves the register offset addition before request_mem_region
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
---
drivers/spi/spi-omap2-mcspi.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 860651f..f757a8e 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1136,14 +1136,15 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
status = -ENODEV;
goto err1;
}
+
+ r->start += pdata->regs_offset;
+ r->end += pdata->regs_offset;
if (!request_mem_region(r->start, resource_size(r),
dev_name(&pdev->dev))) {
status = -EBUSY;
goto err1;
}
- r->start += pdata->regs_offset;
- r->end += pdata->regs_offset;
mcspi->phys = r->start;
mcspi->base = ioremap(r->start, resource_size(r));
if (!mcspi->base) {
--
1.7.2.5
@@ -0,0 +1,44 @@
From 0cd12bf08c6d08771e493342c704de60830785cf Mon Sep 17 00:00:00 2001
From: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Date: Mon, 24 Oct 2011 15:50:27 +0530
Subject: [PATCH 4/5] arm:omap:mcspi: follow proper pm_runtime enable/disable sequence
omap mcspi probe() doesnt call pm_runtime put & disable functions
in case of failure. remove() doesnt call pm_runtime disable. This could
lead to warnings as below on subsequent insmod.
root@arago-armv7:~# insmod /lib/modules/3.1.0-rc8/spi-omap2-mcspi.ko
[ 255.383671] omap2_mcspi omap2_mcspi.1: Unbalanced pm_runtime_enable!
...
This patch adds the pm_runtime put() & disable() at aprropriate stages.
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
---
drivers/spi/spi-omap2-mcspi.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index f757a8e..7a8e19e 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1209,6 +1209,8 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
err4:
spi_master_put(master);
err3:
+ pm_runtime_put_sync(&pdev->dev);
+ pm_runtime_disable(&pdev->dev);
kfree(mcspi->dma_channels);
err2:
release_mem_region(r->start, resource_size(r));
@@ -1230,6 +1232,7 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
dma_channels = mcspi->dma_channels;
omap2_mcspi_disable_clocks(mcspi);
+ pm_runtime_disable(&pdev->dev);
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, resource_size(r));
--
1.7.2.5
@@ -0,0 +1,120 @@
From 608b49748a1ebe4b71de460a343df7fe4ae74c2b Mon Sep 17 00:00:00 2001
From: Hebbar, Gururaja <gururaja.hebbar@ti.com>
Date: Mon, 24 Oct 2011 16:22:50 +0530
Subject: [PATCH 5/5] arm:omap:mcspi: follow proper probe() & remove() steps
Currently McSPI driver doesnt follow correct failure fallback steps
incase of probe & in case of remove() procedure.
This patch corrects label names to give meaningful labels & also
corrects fallback & removal procedure
Signed-off-by: Hebbar, Gururaja <gururaja.hebbar@ti.com>
---
drivers/spi/spi-omap2-mcspi.c | 37 +++++++++++++++++++++++--------------
1 files changed, 23 insertions(+), 14 deletions(-)
diff --git a/drivers/spi/spi-omap2-mcspi.c b/drivers/spi/spi-omap2-mcspi.c
index 7a8e19e..e433029 100644
--- a/drivers/spi/spi-omap2-mcspi.c
+++ b/drivers/spi/spi-omap2-mcspi.c
@@ -1134,7 +1134,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
if (r == NULL) {
status = -ENODEV;
- goto err1;
+ goto free_master;
}
r->start += pdata->regs_offset;
@@ -1142,7 +1142,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
if (!request_mem_region(r->start, resource_size(r),
dev_name(&pdev->dev))) {
status = -EBUSY;
- goto err1;
+ goto free_master;
}
mcspi->phys = r->start;
@@ -1150,7 +1150,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
if (!mcspi->base) {
dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
status = -ENOMEM;
- goto err2;
+ goto release_region;
}
mcspi->dev = &pdev->dev;
@@ -1165,7 +1165,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
GFP_KERNEL);
if (mcspi->dma_channels == NULL)
- goto err2;
+ goto unmap_io;
for (i = 0; i < master->num_chipselect; i++) {
char dma_ch_name[14];
@@ -1195,27 +1195,34 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
mcspi->dma_channels[i].dma_tx_sync_dev = dma_res->start;
}
+ if (status < 0)
+ goto dma_chnl_free;
+
pm_runtime_enable(&pdev->dev);
if (status || omap2_mcspi_master_setup(mcspi) < 0)
- goto err3;
+ goto diable_pm;
status = spi_register_master(master);
if (status < 0)
- goto err4;
+ goto err_spi_register;
return status;
-err4:
+err_spi_register:
spi_master_put(master);
-err3:
+diable_pm:
pm_runtime_put_sync(&pdev->dev);
pm_runtime_disable(&pdev->dev);
+dma_chnl_free:
kfree(mcspi->dma_channels);
-err2:
- release_mem_region(r->start, resource_size(r));
+unmap_io:
iounmap(mcspi->base);
-err1:
+release_region:
+ release_mem_region(r->start, resource_size(r));
+free_master:
+ kfree(master);
+ platform_set_drvdata(pdev, NULL);
return status;
}
@@ -1233,13 +1240,15 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
omap2_mcspi_disable_clocks(mcspi);
pm_runtime_disable(&pdev->dev);
+ kfree(dma_channels);
+ base = mcspi->base;
+ iounmap(base);
+
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, resource_size(r));
- base = mcspi->base;
spi_unregister_master(master);
- iounmap(base);
- kfree(dma_channels);
+ platform_set_drvdata(pdev, NULL);
return 0;
}
--
1.7.2.5
@@ -2319,7 +2319,10 @@ CONFIG_FONT_8x16=y
# CONFIG_FONT_SUN8x16 is not set
# CONFIG_FONT_SUN12x22 is not set
# CONFIG_FONT_10x18 is not set
# CONFIG_LOGO is not set
CONFIG_LOGO=y
# CONFIG_LOGO_LINUX_MONO is not set
# CONFIG_LOGO_LINUX_VGA16 is not set
CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
# CONFIG_SOUND_OSS_CORE is not set
CONFIG_SND=y
File diff suppressed because it is too large Load Diff
+6 -1
View File
@@ -11,7 +11,7 @@ MULTI_CONFIG_BASE_SUFFIX = ""
BRANCH = "v3.1-staging"
SRCREV = "1d84d8853fa30cf3db2571a5aec572accca4e29d"
MACHINE_KERNEL_PR_append = "p+gitr${SRCREV}"
MACHINE_KERNEL_PR_append = "q+gitr${SRCREV}"
COMPATIBLE_MACHINE = "(ti33x)"
@@ -30,6 +30,11 @@ PATCHES_OVER_PSP = " \
file://0002-ARM-OMAP2-beaglebone-add-LED-support.patch \
file://0003-ARM-OMAP2-beaglebone-add-DVI-support-needs-cleanup.patch \
file://0004-da8xx-fb-add-DVI-support-for-beaglebone.patch \
file://0001-usb-musb_core-kill-all-global-and-static-variables.patch \
file://0002-arm-omap-am335x-correct-32KHz-clk-rate.patch \
file://0003-arm-omap-mcspi-correct-memory-range-when-requesting-.patch \
file://0004-arm-omap-mcspi-follow-proper-pm_runtime-enable-disab.patch \
file://0005-arm-omap-mcspi-follow-proper-probe-remove-steps.patch \
"
SRC_URI += "${@base_contains('DISTRO_FEATURES', 'tipspkernel', "", "${PATCHES_OVER_PSP}", d)}"