summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firmware/target/arm/imx233/debug-imx233.c25
-rw-r--r--firmware/target/arm/imx233/ocotp-imx233.h17
-rw-r--r--firmware/usbstack/usb_core.c3
3 files changed, 36 insertions, 9 deletions
diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c
index 76f2c6b066..84d68a780d 100644
--- a/firmware/target/arm/imx233/debug-imx233.c
+++ b/firmware/target/arm/imx233/debug-imx233.c
@@ -537,13 +537,13 @@ bool dbg_hw_info_pinctrl(void)
537 } 537 }
538} 538}
539 539
540#if IMX233_SUBTARGET >= 3700
541struct 540struct
542{ 541{
543 const char *name; 542 const char *name;
544 volatile uint32_t *addr; 543 volatile uint32_t *addr;
545} dbg_ocotp[] = 544} dbg_ocotp[] =
546{ 545{
546#if IMX233_SUBTARGET >= 3700
547#define E(n,v) { .name = n, .addr = &v } 547#define E(n,v) { .name = n, .addr = &v }
548 E("CUST0", HW_OCOTP_CUSTn(0)), E("CUST1", HW_OCOTP_CUSTn(1)), 548 E("CUST0", HW_OCOTP_CUSTn(0)), E("CUST1", HW_OCOTP_CUSTn(1)),
549 E("CUST2", HW_OCOTP_CUSTn(2)), E("CUST0", HW_OCOTP_CUSTn(3)), 549 E("CUST2", HW_OCOTP_CUSTn(2)), E("CUST0", HW_OCOTP_CUSTn(3)),
@@ -559,6 +559,23 @@ struct
559 E("ROM2", HW_OCOTP_ROMn(2)), E("ROM3", HW_OCOTP_ROMn(3)), 559 E("ROM2", HW_OCOTP_ROMn(2)), E("ROM3", HW_OCOTP_ROMn(3)),
560 E("ROM4", HW_OCOTP_ROMn(4)), E("ROM5", HW_OCOTP_ROMn(5)), 560 E("ROM4", HW_OCOTP_ROMn(4)), E("ROM5", HW_OCOTP_ROMn(5)),
561 E("ROM6", HW_OCOTP_ROMn(6)), E("ROM7", HW_OCOTP_ROMn(7)), 561 E("ROM6", HW_OCOTP_ROMn(6)), E("ROM7", HW_OCOTP_ROMn(7)),
562#undef E
563#else
564#define E(n,v) { .name = n, .addr = &v }
565 E("LASERFUSE0", HW_RTC_LASERFUSEn(0)),
566 E("LASERFUSE1", HW_RTC_LASERFUSEn(1)),
567 E("LASERFUSE2", HW_RTC_LASERFUSEn(2)),
568 E("LASERFUSE3", HW_RTC_LASERFUSEn(3)),
569 E("LASERFUSE4", HW_RTC_LASERFUSEn(4)),
570 E("LASERFUSE5", HW_RTC_LASERFUSEn(5)),
571 E("LASERFUSE6", HW_RTC_LASERFUSEn(6)),
572 E("LASERFUSE7", HW_RTC_LASERFUSEn(7)),
573 E("LASERFUSE8", HW_RTC_LASERFUSEn(8)),
574 E("LASERFUSE9", HW_RTC_LASERFUSEn(9)),
575 E("LASERFUSE10", HW_RTC_LASERFUSEn(10)),
576 E("LASERFUSE11", HW_RTC_LASERFUSEn(11)),
577#undef E
578#endif
562}; 579};
563 580
564bool dbg_hw_info_ocotp(void) 581bool dbg_hw_info_ocotp(void)
@@ -608,12 +625,6 @@ bool dbg_hw_info_ocotp(void)
608 yield(); 625 yield();
609 } 626 }
610} 627}
611#else
612bool dbg_hw_info_ocotp(void)
613{
614 return true;
615}
616#endif
617 628
618bool dbg_hw_info_pwm(void) 629bool dbg_hw_info_pwm(void)
619{ 630{
diff --git a/firmware/target/arm/imx233/ocotp-imx233.h b/firmware/target/arm/imx233/ocotp-imx233.h
index 635d7c9267..0827ea0d19 100644
--- a/firmware/target/arm/imx233/ocotp-imx233.h
+++ b/firmware/target/arm/imx233/ocotp-imx233.h
@@ -24,9 +24,12 @@
24#include "config.h" 24#include "config.h"
25#include "system.h" 25#include "system.h"
26 26
27#include "regs/regs-ocotp.h" 27/** STMP3700 and over have OCOTP registers
28 * where STMP3600 has laser fuses. */
28 29
29#if IMX233_SUBTARGET >= 3700 30#if IMX233_SUBTARGET >= 3700
31#include "regs/regs-ocotp.h"
32
30#define IMX233_NUM_OCOTP_CUST 4 33#define IMX233_NUM_OCOTP_CUST 4
31#define IMX233_NUM_OCOTP_CRYPTO 4 34#define IMX233_NUM_OCOTP_CRYPTO 4
32#define IMX233_NUM_OCOTP_HWCAP 6 35#define IMX233_NUM_OCOTP_HWCAP 6
@@ -53,6 +56,18 @@ static inline uint32_t imx233_ocotp_read(volatile uint32_t *reg)
53 imx233_ocotp_open_banks(false); 56 imx233_ocotp_open_banks(false);
54 return val; 57 return val;
55} 58}
59#else
60#include "regs/regs-rtc.h"
61
62#define IMX233_NUM_OCOTP_LASERFUSE 12
63
64static inline uint32_t imx233_ocotp_read(volatile uint32_t *reg)
65{
66 BF_WR_V(RTC_UNLOCK, KEY, VAL);
67 uint32_t val = *reg;
68 BF_WR(RTC_UNLOCK, KEY, 0);
69 return val;
70}
56#endif 71#endif
57 72
58#endif /* OCOTP_IMX233_H */ 73#endif /* OCOTP_IMX233_H */
diff --git a/firmware/usbstack/usb_core.c b/firmware/usbstack/usb_core.c
index dbc9367dfb..406f2a71e4 100644
--- a/firmware/usbstack/usb_core.c
+++ b/firmware/usbstack/usb_core.c
@@ -333,7 +333,8 @@ static void set_serial_descriptor(void)
333 } 333 }
334 usb_string_iSerial.bLength = 36 + (2 * AS3514_UID_LEN); 334 usb_string_iSerial.bLength = 36 + (2 * AS3514_UID_LEN);
335} 335}
336#elif (CONFIG_CPU == IMX233) 336#elif (CONFIG_CPU == IMX233) && IMX233_SUBTARGET >= 3700
337// FIXME where is the STMP3600 serial number stored ?
337static void set_serial_descriptor(void) 338static void set_serial_descriptor(void)
338{ 339{
339 short* p = &usb_string_iSerial.wString[1]; 340 short* p = &usb_string_iSerial.wString[1];