diff options
author | Byungkuk Seo <bseo@nvidia.com> | 2012-11-26 16:59:29 +0900 |
---|---|---|
committer | Mrutyunjay Sawant <msawant@nvidia.com> | 2012-11-29 05:41:02 -0800 |
commit | f0777acc644023b072398de4e569499c75319dd1 (patch) | |
tree | 98df2f2085e36257b775dc23cdf55f4be7ff5946 /arch/arm/mach-tegra/tegra_odm_fuses.c | |
parent | 3edfdf90176b4ddf0c3da846eb1acd6fa3b00122 (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.c | 15 |
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)); |