diff options
author | Varun Wadekar <vwadekar@nvidia.com> | 2011-06-16 16:38:30 +0530 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:47:33 -0800 |
commit | 1633a03903468c7288841fa9299b24f49dfc3c52 (patch) | |
tree | 7ae7c8819a9c4b45e3ea7022489a692a67dccf64 /arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h | |
parent | 5b1b7057aafddc10ebb92b047841ff68e14baa53 (diff) |
arm: tegra: fuse: support to burn fuses on the field
- follow the new sequence shared by the hardware team
- merge Tegra2 and Tegra3.0 odm fuse burning into a single file
Bug 796825
Original-Change-Id: Ia06d589eba95254a410016dce244375f27e22be0
Signed-off-by: Varun Wadekar <vwadekar@nvidia.com>
Reviewed-on: http://git-master/r/38404
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: R740d7bd47eaa6231954ae98686272a755a4bce14
Diffstat (limited to 'arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h')
-rw-r--r-- | arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h | 106 |
1 files changed, 106 insertions, 0 deletions
diff --git a/arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h b/arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h new file mode 100644 index 000000000000..364e66caea00 --- /dev/null +++ b/arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h @@ -0,0 +1,106 @@ +/* + * arch/arm/mach-tegra/include/mach/tegra_odm_fuses.h + * + * Copyright (c) 2011, NVIDIA Corporation. + * + * 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 + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ + +#ifndef __MACH_TEGRA_ODM_FUSES_H +#define __MACH_TEGRA_ODM_FUSES_H + +#define SBK_DEVKEY_STATUS_SZ sizeof(u32) + +/* + * fuse io parameters: params with sizes less than a byte are + * explicitly mentioned + */ +enum fuse_io_param { + DEVKEY, + JTAG_DIS, /* 1 bit long */ + /* + * Programming the odm production fuse at the same + * time as the sbk or dev_key is not allowed as it is not possible to + * verify that the sbk or dev_key were programmed correctly. + */ + ODM_PROD_MODE, /* 1 bit long */ + SEC_BOOT_DEV_CFG, + SEC_BOOT_DEV_SEL, /* 3 bits long */ + SBK, + SW_RSVD, /* 4 bits long */ + IGNORE_DEV_SEL_STRAPS, /* 1 bit long */ + ODM_RSVD, + SBK_DEVKEY_STATUS, + _PARAMS_U32 = 0x7FFFFFFF +}; + +#define MAX_PARAMS SBK_DEVKEY_STATUS + +/* the order of the members is pre-decided. please do not change */ +struct fuse_data { + u32 devkey; + u32 jtag_dis; + u32 odm_prod_mode; + u32 bootdev_cfg; + u32 bootdev_sel; + u32 sbk[4]; + u32 sw_rsvd; + u32 ignore_devsel_straps; + u32 odm_rsvd[8]; +}; + +/* secondary boot device options */ +enum { + SECBOOTDEV_SDMMC, + SECBOOTDEV_NOR, + SECBOOTDEV_SPI, + SECBOOTDEV_NAND, + SECBOOTDEV_LBANAND, + SECBOOTDEV_MUXONENAND, + _SECBOOTDEV_MAX, + _SECBOOTDEV_U32 = 0x7FFFFFFF +}; + +/* + * read the fuse settings + * @param: io_param_type - param type enum + * @param: size - read size in bytes + */ +int tegra_fuse_read(enum fuse_io_param io_param_type, u32 *data, int size); + +#define FLAGS_DEVKEY BIT(DEVKEY) +#define FLAGS_JTAG_DIS BIT(JTAG_DIS) +#define FLAGS_SBK_DEVKEY_STATUS BIT(SBK_DEVKEY_STATUS) +#define FLAGS_ODM_PROD_MODE BIT(ODM_PROD_MODE) +#define FLAGS_SEC_BOOT_DEV_CFG BIT(SEC_BOOT_DEV_CFG) +#define FLAGS_SEC_BOOT_DEV_SEL BIT(SEC_BOOT_DEV_SEL) +#define FLAGS_SBK BIT(SBK) +#define FLAGS_SW_RSVD BIT(SW_RSVD) +#define FLAGS_IGNORE_DEV_SEL_STRAPS BIT(IGNORE_DEV_SEL_STRAPS) +#define FLAGS_ODMRSVD BIT(ODM_RSVD) + +/* + * Prior to invoking this routine, the caller is responsible for supplying + * valid fuse programming voltage. + * + * @param: pgm_data - entire data to be programmed + * @flags: program flags (e.g. FLAGS_DEVKEY) + */ +int tegra_fuse_program(struct fuse_data *pgm_data, u32 flags); + +/* Disables the fuse programming until the next system reset */ +void tegra_fuse_program_disable(void); + +#endif |