From 659febc749627a92c59f2d765da59eb9c995c50d Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 7 Jul 2013 17:29:14 +0200 Subject: imx233: add emi debug info Change-Id: I33317ae26b70c825d4c5e3aaac364da5e0dc06c2 --- firmware/target/arm/imx233/debug-imx233.c | 39 ++++++++++++++++++++++++++++++- firmware/target/arm/imx233/emi-imx233.c | 14 +++++++++++ firmware/target/arm/imx233/emi-imx233.h | 11 +++++++++ 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/firmware/target/arm/imx233/debug-imx233.c b/firmware/target/arm/imx233/debug-imx233.c index 84d68a780d..e350b5a8ba 100644 --- a/firmware/target/arm/imx233/debug-imx233.c +++ b/firmware/target/arm/imx233/debug-imx233.c @@ -34,6 +34,7 @@ #include "pinctrl-imx233.h" #include "ocotp-imx233.h" #include "pwm-imx233.h" +#include "emi-imx233.h" #include "string.h" #include "stdio.h" @@ -732,12 +733,48 @@ bool dbg_hw_info_usb(void) } } +bool dbg_hw_info_emi(void) +{ + lcd_setfont(FONT_SYSFIXED); + + while(1) + { + int button = get_action(CONTEXT_STD, HZ / 10); + switch(button) + { + case ACTION_STD_NEXT: + case ACTION_STD_PREV: + case ACTION_STD_OK: + case ACTION_STD_MENU: + lcd_setfont(FONT_UI); + return true; + case ACTION_STD_CANCEL: + lcd_setfont(FONT_UI); + return false; + } + + lcd_clear_display(); + struct imx233_emi_info_t info = imx233_emi_get_info(); + int line = 0; + lcd_putsf(0, line++, "EMI"); + lcd_putsf(0, line++, "rows: %d", info.rows); + lcd_putsf(0, line++, "columns: %d", info.columns); + lcd_putsf(0, line++, "banks: %d", info.banks); + lcd_putsf(0, line++, "chips: %d", info.chips); + lcd_putsf(0, line++, "size: %d MiB", info.size / 1024 / 1024); + lcd_putsf(0, line++, "cas: %d.%d", info.cas / 2, 5 * (info.cas % 2)); + + lcd_update(); + yield(); + } +} + bool dbg_hw_info(void) { return dbg_hw_info_clkctrl() && dbg_hw_info_dma() && dbg_hw_info_adc() && dbg_hw_info_power() && dbg_hw_info_powermgmt() && dbg_hw_info_rtc() && dbg_hw_info_dcp() && dbg_hw_info_pinctrl() && dbg_hw_info_icoll() && - dbg_hw_info_ocotp() && dbg_hw_info_pwm() && dbg_hw_info_usb() && + dbg_hw_info_ocotp() && dbg_hw_info_pwm() && dbg_hw_info_usb() && dbg_hw_info_emi() && dbg_hw_target_info(); } diff --git a/firmware/target/arm/imx233/emi-imx233.c b/firmware/target/arm/imx233/emi-imx233.c index c62fa58a99..7e44c17c05 100644 --- a/firmware/target/arm/imx233/emi-imx233.c +++ b/firmware/target/arm/imx233/emi-imx233.c @@ -20,6 +20,7 @@ ****************************************************************************/ #include "emi-imx233.h" #include "clkctrl-imx233.h" +#include "string.h" struct emi_reg_t { @@ -199,3 +200,16 @@ void imx233_emi_set_frequency(unsigned long freq) restore_interrupt(oldstatus); } #endif + +struct imx233_emi_info_t imx233_emi_get_info(void) +{ + struct imx233_emi_info_t info; + memset(&info, 0, sizeof(info)); + info.rows = 13 - BF_RD(DRAM_CTL10, ADDR_PINS); + info.columns = 12 - BF_RD(DRAM_CTL11, COLUMN_SIZE); + info.cas = BF_RD(DRAM_CTL13, CASLAT_LIN); + info.banks = 4; + info.chips = __builtin_popcount(BF_RD(DRAM_CTL14, CS_MAP)); + info.size = 2 * (1 << (info.rows + info.columns)) * info.chips * info.banks; + return info; +} \ No newline at end of file diff --git a/firmware/target/arm/imx233/emi-imx233.h b/firmware/target/arm/imx233/emi-imx233.h index cab2e5e8c0..71aae3e884 100644 --- a/firmware/target/arm/imx233/emi-imx233.h +++ b/firmware/target/arm/imx233/emi-imx233.h @@ -30,6 +30,16 @@ #define HW_DRAM_CTLxx(xx) (*(&HW_DRAM_CTL00 + (xx))) +struct imx233_emi_info_t +{ + int cas; // 1/2 cycle unit + int rows; + int columns; + int banks; + int chips; + int size; +}; + /** * Absolute maximum EMI speed: 151.58 MHz (mDDR), 130.91 MHz (DDR) * Intermediate EMI speeds: 130.91 MHz, 120.00 MHz, 64 MHz, 24 MHz @@ -41,5 +51,6 @@ #define IMX233_EMIFREQ_24_MHz 24000 void imx233_emi_set_frequency(unsigned long freq); +struct imx233_emi_info_t imx233_emi_get_info(void); #endif /* __EMI_IMX233_H__ */ -- cgit v1.2.3