Add support for user to use netlink for message output to XTI. Add autoidle feature if SDTI is not used. Signed-off-by: Roman Tereshonkov <roman.tereshonkov@xxxxxxxxx> --- drivers/misc/sti/Makefile | 2 +- drivers/misc/sti/sdti.c | 14 ++++++++++---- drivers/misc/sti/sti-netlink.c | 8 +++++++- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/drivers/misc/sti/Makefile b/drivers/misc/sti/Makefile index aee30bd..43574d1 100644 --- a/drivers/misc/sti/Makefile +++ b/drivers/misc/sti/Makefile @@ -2,7 +2,7 @@ ifeq ($(CONFIG_ARCH_OMAP3),y) obj-$(CONFIG_OMAP_STI) += sdti.o else obj-$(CONFIG_OMAP_STI) += sti.o sti-fifo.o -obj-$(CONFIG_NET) += sti-netlink.o endif +obj-$(CONFIG_NET) += sti-netlink.o obj-$(CONFIG_OMAP_STI_CONSOLE) += sti-console.o diff --git a/drivers/misc/sti/sdti.c b/drivers/misc/sti/sdti.c index 4514783..92ce57b 100644 --- a/drivers/misc/sti/sdti.c +++ b/drivers/misc/sti/sdti.c @@ -31,11 +31,14 @@ #define CPU1_TRACE_EN 0x01 #define CPU2_TRACE_EN 0x02 +#define SDTI_SYSCONFIG_SOFTRESET (1 << 1) +#define SDTI_SYSCONFIG_AUTOIDLE (1 << 0) + static struct clk *sdti_ck; void __iomem *sti_base, *sti_channel_base; static DEFINE_SPINLOCK(sdti_lock); -void omap_sti_channel_write_trace(int len, int id, void *data, +void sti_channel_write_trace(int len, int id, void *data, unsigned int channel) { const u8 *tpntr = data; @@ -49,13 +52,13 @@ void omap_sti_channel_write_trace(int len, int id, void *data, spin_unlock_irq(&sdti_lock); } -EXPORT_SYMBOL(omap_sti_channel_write_trace); +EXPORT_SYMBOL(sti_channel_write_trace); static void omap_sdti_reset(void) { int i; - sti_writel(0x02, SDTI_SYSCONFIG); + sti_writel(SDTI_SYSCONFIG_SOFTRESET, SDTI_SYSCONFIG); for (i = 0; i < 10000; i++) if (sti_readl(SDTI_SYSSTATUS) & 1) @@ -79,6 +82,9 @@ static int __init omap_sdti_init(void) omap_sdti_reset(); sti_writel(0xC5ACCE55, SDTI_LOCK_ACCESS); + /* Autoidle */ + sti_writel(SDTI_SYSCONFIG_AUTOIDLE, SDTI_SYSCONFIG); + /* Claim SDTI */ sti_writel(1 << 30, SDTI_WINCTRL); i = sti_readl(SDTI_WINCTRL); @@ -99,7 +105,7 @@ static int __init omap_sdti_init(void) snprintf(buf, sizeof(buf), "OMAP SDTI support loaded (HW v%u.%u)\n", (i >> 4) & 0x0f, i & 0x0f); printk(KERN_INFO "%s", buf); - omap_sti_channel_write_trace(strlen(buf), 0xc3, buf, 239); + sti_channel_write_trace(strlen(buf), 0xc3, buf, 239); return 0; } diff --git a/drivers/misc/sti/sti-netlink.c b/drivers/misc/sti/sti-netlink.c index f1f8a48..b198e4c 100644 --- a/drivers/misc/sti/sti-netlink.c +++ b/drivers/misc/sti/sti-netlink.c @@ -25,6 +25,7 @@ enum { STI_WRITE, }; +#if defined(CONFIG_ARCH_OMAP1) || defined(CONFIG_ARCH_OMAP2) static int sti_netlink_read(int pid, int seq, void *payload, int size) { struct sk_buff *skb; @@ -55,6 +56,7 @@ nlmsg_failure: return -EINVAL; } +#endif /* * We abuse nlmsg_type and nlmsg_flags for our purposes. @@ -66,7 +68,7 @@ static int sti_netlink_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) { void *data; u8 chan, id; - int size, ret = 0, len = 0; + int size, ret = 0; data = NLMSG_DATA(nlh); chan = (nlh->nlmsg_flags >> 8) & 0xff; @@ -77,7 +79,10 @@ static int sti_netlink_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) case STI_WRITE: sti_channel_write_trace(size, id, data, chan); break; +#if defined(CONFIG_ARCH_OMAP1) || defined(CONFIG_ARCH_OMAP2) case STI_READ: + int len = 0; + data = kmalloc(size, GFP_KERNEL); if (!data) return -ENOMEM; @@ -88,6 +93,7 @@ static int sti_netlink_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) data, len); kfree(data); break; +#endif default: return -ENOTTY; } -- 1.5.5.1 -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html