summaryrefslogtreecommitdiff
path: root/arch/arm/mach-tegra/tegra_odm_fuses.c
diff options
context:
space:
mode:
authorByungkuk Seo <bseo@nvidia.com>2012-11-26 16:59:29 +0900
committerMrutyunjay Sawant <msawant@nvidia.com>2012-11-29 05:41:02 -0800
commitf0777acc644023b072398de4e569499c75319dd1 (patch)
tree98df2f2085e36257b775dc23cdf55f4be7ff5946 /arch/arm/mach-tegra/tegra_odm_fuses.c
parent3edfdf90176b4ddf0c3da846eb1acd6fa3b00122 (diff)
arm: tegra: fuse: keep odm_reserved writable
Remove the predicate that disables blowing an odm_reserved fuse when odm_production_mode is already blown. Correct the error message. Bug 1181444 Change-Id: I37ba364932d3902bfd11181fafa3ad9e1d28e9f1 Signed-off-by: Byungkuk Seo <bseo@nvidia.com> Reviewed-on: http://git-master/r/166103 (cherry picked from commit fc198548e0b7d7abbeb306a1f3f7b285c203467e) Reviewed-on: http://git-master/r/167122 Reviewed-by: Venu Byravarasu <vbyravarasu@nvidia.com>
Diffstat (limited to 'arch/arm/mach-tegra/tegra_odm_fuses.c')
-rw-r--r--arch/arm/mach-tegra/tegra_odm_fuses.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/arch/arm/mach-tegra/tegra_odm_fuses.c b/arch/arm/mach-tegra/tegra_odm_fuses.c
index ae415d1286bc..a1004049932e 100644
--- a/arch/arm/mach-tegra/tegra_odm_fuses.c
+++ b/arch/arm/mach-tegra/tegra_odm_fuses.c
@@ -1,7 +1,7 @@
/*
* arch/arm/mach-tegra/tegra_odm_fuses.c
*
- * Copyright (c) 2010-2011, NVIDIA Corporation.
+ * Copyright (c) 2010-2012, NVIDIA Corporation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -599,7 +599,8 @@ int tegra_fuse_program(struct fuse_data *pgm_data, u32 flags)
}
if (fuse_odm_prod_mode() && (flags != FLAGS_ODMRSVD)) {
- pr_err("reserved odm fuses aren't allowed in secure mode");
+ pr_err("Non ODM reserved fuses cannot be burnt after "
+ "ODM production mode/secure mode fuse is burnt");
return -EPERM;
}
@@ -731,8 +732,11 @@ static ssize_t fuse_store(struct kobject *kobj, struct kobj_attribute *attr,
raw_data = ((u32 *)&data) + fuse_info_tbl[param].data_offset;
raw_byte_data = (u8 *)raw_data;
- if (fuse_odm_prod_mode()) {
- pr_err("%s: device locked. odm fuse already blown\n", __func__);
+ if (fuse_odm_prod_mode() && (param != ODM_RSVD)) {
+ pr_err("%s: Non ODM reserved fuses cannot be burnt "
+ "after ODM production mode/secure mode fuse is burnt\n"
+ , __func__);
+
return -EPERM;
}
@@ -794,7 +798,6 @@ static ssize_t fuse_store(struct kobject *kobj, struct kobj_attribute *attr,
CHK_ERR(sysfs_chmod_file(kobj, &sbk_attr.attr, 0440));
CHK_ERR(sysfs_chmod_file(kobj, &sw_rsvd_attr.attr, 0440));
CHK_ERR(sysfs_chmod_file(kobj, &ignore_dev_sel_straps_attr.attr, 0440));
- CHK_ERR(sysfs_chmod_file(kobj, &odm_rsvd_attr.attr, 0440));
}
done:
@@ -878,9 +881,9 @@ static int __init tegra_fuse_program_init(void)
sbk_attr.attr.mode = 0640;
sw_rsvd_attr.attr.mode = 0640;
ignore_dev_sel_straps_attr.attr.mode = 0640;
- odm_rsvd_attr.attr.mode = 0640;
odm_prod_mode_attr.attr.mode = 0644;
}
+ odm_rsvd_attr.attr.mode = 0640;
CHK_ERR(sysfs_create_file(fuse_kobj, &odm_prod_mode_attr.attr));
CHK_ERR(sysfs_create_file(fuse_kobj, &devkey_attr.attr));