From 29c578081d643f636c42cdc7ebfafa1fb953ae21 Mon Sep 17 00:00:00 2001 From: Rikard Olsson Date: Wed, 11 Jan 2012 15:55:40 +0100 Subject: ARM: ux500: adds additional dump areas Adds additional dump area information which contains information of fuses in db8500. ST-Ericsson Linux next: - ST-Ericsson ID: 404278 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: If2aea9493c0942700acc676c40dc9b6e344ef891 Signed-off-by: Rikard Olsson Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/45155 Reviewed-by: Srinidhi KASAGAR --- arch/arm/mach-ux500/mloader-db8500.c | 12 +++++++++++- drivers/misc/dbx500-mloader.c | 19 +++++++++++++++++++ include/linux/mloader.h | 1 + 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/arch/arm/mach-ux500/mloader-db8500.c b/arch/arm/mach-ux500/mloader-db8500.c index b13652f55cb..8f08e6af969 100644 --- a/arch/arm/mach-ux500/mloader-db8500.c +++ b/arch/arm/mach-ux500/mloader-db8500.c @@ -12,6 +12,7 @@ #include #include +#include static struct dbx500_ml_area modem_areas[] = { { .name = "modem_trace", .start = 0x6000000, .size = 0xf00000 }, @@ -31,13 +32,22 @@ static struct dbx500_mloader_pdata mloader_fw_data = { .nr_areas = ARRAY_SIZE(modem_areas), }; +static struct resource mloader_fw_rsrc[] = { + { + .start = (U8500_BACKUPRAM1_BASE + 0xF70), + .end = (U8500_BACKUPRAM1_BASE + 0xF7C), + .flags = IORESOURCE_MEM + } +}; + struct platform_device mloader_fw_device = { .name = "dbx500_mloader_fw", .id = -1, .dev = { .platform_data = &mloader_fw_data, }, - .num_resources = 0, + .resource = mloader_fw_rsrc, + .num_resources = ARRAY_SIZE(mloader_fw_rsrc) }; /* Default areas can be overloaded in cmdline */ diff --git a/drivers/misc/dbx500-mloader.c b/drivers/misc/dbx500-mloader.c index c3ec8b67983..408d1a1a29e 100644 --- a/drivers/misc/dbx500-mloader.c +++ b/drivers/misc/dbx500-mloader.c @@ -22,6 +22,7 @@ #include #include +#include #define DEVICE_NAME "dbx500_mloader_fw" @@ -30,6 +31,8 @@ struct mloader_priv { struct dbx500_mloader_pdata *pdata; struct miscdevice misc_dev; u32 aeras_size; + void __iomem *uid_base; + u8 size; }; static struct mloader_priv *mloader_priv; @@ -165,6 +168,11 @@ static long mloader_fw_ioctl(struct file *filp, unsigned int cmd, kfree(dump_images); break; } + case ML_GET_FUSEINFO: { + ret = copy_to_user(argp, (void *) mloader_priv->uid_base, + mloader_priv->size) ? -EFAULT : 0; + break; + } default: ret = -EPERM; break; @@ -183,6 +191,7 @@ static int __devinit mloader_fw_probe(struct platform_device *pdev) { int ret = 0; int i; + struct resource *res = NULL; mloader_priv = kzalloc(sizeof(*mloader_priv), GFP_ATOMIC); if (!mloader_priv) { @@ -196,6 +205,16 @@ static int __devinit mloader_fw_probe(struct platform_device *pdev) mloader_priv->misc_dev.minor = MISC_DYNAMIC_MINOR; mloader_priv->misc_dev.name = DEVICE_NAME; mloader_priv->misc_dev.fops = &modem_fw_fops; + + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + mloader_priv->size = resource_size(res); + mloader_priv->uid_base = ioremap(res->start, mloader_priv->size); + + if (!mloader_priv->uid_base) { + ret = -ENOMEM; + goto err_free_priv; + } + ret = misc_register(&mloader_priv->misc_dev); if (ret < 0) { dev_err(&pdev->dev, "can't misc_register\n"); diff --git a/include/linux/mloader.h b/include/linux/mloader.h index ceca3245856..c339a7f7a36 100644 --- a/include/linux/mloader.h +++ b/include/linux/mloader.h @@ -13,6 +13,7 @@ #define ML_UPLOAD _IO(ML_IO_NUMBER, 1) #define ML_GET_NBIMAGES _IOR(ML_IO_NUMBER, 2, int) #define ML_GET_DUMPINFO _IOR(ML_IO_NUMBER, 3, struct dump_image*) +#define ML_GET_FUSEINFO _IOR(ML_IO_NUMBER, 4, char*) #define MAX_NAME 16 -- cgit v1.2.3