improvements in: omap4 OPP, omap4 usb booting and archosg9
Subsystems (3)
cover improvements in: omap4 OPP, omap4 usb booting and archosg9
.- in omap4 OPP use recommended values from datasheet
.- when booting an omap4 through usb it failed from time to time
this patch solves this problem
.- on archos g9 tablet, use the same pad_conf values readden from linux
when booting with avboot (archos own bootloader)
.- also on archos g9 tablet reorder initialization: first voltages then clocks
Vicente Bergas (3):
OMAP4: use OPPs recommended in datasheet
OMAP4_USB: more stable communications
ARCHOS: use manufacturer values for pad_conf and reorder
initialization
arch/arm/boards/archosg9/board.c | 1 + arch/arm/boards/archosg9/lowlevel.c | 18 +- arch/arm/boards/archosg9/mux.c | 654 +++++++++----------------- arch/arm/mach-omap/include/mach/omap4-clock.h | 12 +- scripts/omap4_usbboot.c | 68 ++- scripts/usb_linux.c | 4 +- 6 files changed, 295 insertions(+), 462 deletions(-)
Signature · 7 lines
1.8.1.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH 1/3 OMAP4: use OPPs recommended in datasheet
--- arch/arm/mach-omap/include/mach/omap4-clock.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-)
arch/arm/mach-omap/include/mach/omap4-clock.h +7 -5
@@ -307,7 +307,9 @@ struct dpll_param {#define OMAP4_MPU_DPLL_PARAM_38M4_MPU600 {0x7d, 0x07, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}#define OMAP4_MPU_DPLL_PARAM_38M4_MPU1000 {0x69, 0x03, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}/* dpll locked at 1840 MHz MPU clk at 920 MHz(OPP Turbo 4460) - DCC OFF */ -#define OMAP4_MPU_DPLL_PARAM_19M2_MPU920 {0x23F, 0x11, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00} +#define OMAP4_MPU_DPLL_PARAM_19M2_MPU920 {0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00} +#define OMAP4_MPU_DPLL_PARAM_19M2_MPU1200 {0x7d, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00} +#define OMAP4_MPU_DPLL_PARAM_19M2_MPU1500 {0x4e, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00}#define OMAP4_IVA_DPLL_PARAM_19M2 {0x61, 0x01, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00}#define OMAP4_IVA_DPLL_PARAM_38M4 {0x61, 0x03, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00}
@@ -321,11 +323,11 @@ struct dpll_param {#define OMAP4_USB_DPLL_PARAM_19M2 {0x32, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0}#define OMAP4_USB_DPLL_PARAM_38M4 {0x32, 0x1, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0} -#define OMAP4_CORE_DPLL_PARAM_19M2_DDR200 {0x7d, 0x02, 0x02, 0x05, 0x08, 0x04, 0x06, 0x05} +#define OMAP4_CORE_DPLL_PARAM_19M2_DDR200 {0x7d, 0x02, 0x02, 0x05, 0x08, 0x04, 0x06, 0x06}#define OMAP4_CORE_DPLL_PARAM_19M2_DDR333 {0x410, 0x09, 0x03, 0x0c, 0x14, 0x0a, 0x0f, 0x0c} -#define OMAP4_CORE_DPLL_PARAM_19M2_DDR400 {0x7d, 0x02, 0x01, 0x05, 0x08, 0x04, 0x06, 0x05} -#define OMAP4_CORE_DPLL_PARAM_38M4_DDR200 {0x7d, 0x05, 0x02, 0x05, 0x08, 0x04, 0x06, 0x05} -#define OMAP4_CORE_DPLL_PARAM_38M4_DDR400 {0x7d, 0x05, 0x01, 0x05, 0x08, 0x04, 0x06, 0x05} +#define OMAP4_CORE_DPLL_PARAM_19M2_DDR400 {0x7d, 0x02, 0x01, 0x05, 0x08, 0x04, 0x06, 0x06} +#define OMAP4_CORE_DPLL_PARAM_38M4_DDR200 {0x7d, 0x05, 0x02, 0x05, 0x08, 0x04, 0x06, 0x06} +#define OMAP4_CORE_DPLL_PARAM_38M4_DDR400 {0x7d, 0x05, 0x01, 0x05, 0x08, 0x04, 0x06, 0x06}void omap4_configure_mpu_dpll (const struct dpll_param *dpll_param);void omap4_configure_iva_dpll (const struct dpll_param *dpll_param);
Signature · 7 lines
1.8.1.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH 2/3 OMAP4_USB: more stable communications
In reply to Vicente Bergas--- scripts/omap4_usbboot.c | 68 ++++++++++++++++++++++++++++++------------------- scripts/usb_linux.c | 4 +-- 2 files changed, 44 insertions(+), 28 deletions(-)
scripts/omap4_usbboot.c +42 -26
@@ -41,10 +41,17 @@ #define host_print(fmt, arg...) printf(FORMAT fmt FORMAT, \ HOST_FORMAT, ##arg, TARGET_FORMAT) +void panic (struct termios *t_restore) +{ +tcsetattr (STDIN_FILENO ,TCSANOW , t_restore); +printf (FORMAT ,HOST_FORMAT ); +exit (1 ); +} +struct thread_vars {struct usb_handle *usb; -int hide; -struct termios to; +pthread_mutex_t usb_mutex; +struct termios t_restore; };void *listenerTask (void *argument)
@@ -55,13 +62,12 @@ void *listenerTask(void *argument) c =getchar ();if (c ==EOF )return NULL ; -while (vars->hide) -usleep (10000 ); +pthread_mutex_lock (&vars->usb_mutex);if (usb_write (vars->usb, &c,4 ) !=4 ) {host_print ("could not send '%c' to target\n" , c); -tcsetattr (STDIN_FILENO ,TCSANOW , &vars->to); -exit (1 ); +panic (&vars->t_restore); } +pthread_mutex_unlock (&vars->usb_mutex); }return NULL ; }
@@ -168,8 +174,8 @@ struct file_data {void *data; }; -int process_file ( -struct usb_handle *usb,const char *rootfs,struct file_data *fd_vector) +int process_file (struct usb_handle *usb,const char *rootfs, +struct file_data *fd_vector,struct termios *t_restore) {uint32_t i, j, pos, size;struct stat s;
@@ -178,7 +184,7 @@ int process_file(if (usb_read (usb, &i,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); } ret =0 ;switch (i) {
@@ -188,7 +194,7 @@ int process_file(for (;; j++) {if (usb_read (usb, &i,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (i ==USBBOOT_FS_CMD_END ) { fname[j] =0 ;
@@ -242,13 +248,13 @@ open_ok: usb_write(usb, &size, 4) != 4 ) {host_print ("could not send file size to target\n" ); -exit (1 ); +panic (t_restore); }break ;case USBBOOT_FS_CMD_CLOSE :if (usb_read (usb, &i,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (i >=MAX_OPEN_FILES || !fd_vector[i].data) {host_print ("invalid close index\n" );
@@ -257,7 +263,7 @@ open_ok: }if (usb_read (usb, &j,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (j !=USBBOOT_FS_CMD_END ) {host_print ("invalid close\n" );
@@ -270,7 +276,7 @@ open_ok:case USBBOOT_FS_CMD_READ :if (usb_read (usb, &i,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (i >=MAX_OPEN_FILES || !fd_vector[i].data) {host_print ("invalid read index\n" );
@@ -279,7 +285,7 @@ open_ok: }if (usb_read (usb, &pos,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (pos >= fd_vector[i].size) {host_print ("invalid read pos\n" );
@@ -288,7 +294,7 @@ open_ok: }if (usb_read (usb, &size,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (pos+size > fd_vector[i].size) {host_print ("invalid read size\n" );
@@ -297,7 +303,7 @@ open_ok: }if (usb_read (usb, &j,4 ) !=4 ) {host_print ("USB error\n" ); -exit (1 ); +panic (t_restore); }if (j !=USBBOOT_FS_CMD_END ) {host_print ("invalid read\n" );
@@ -306,7 +312,7 @@ open_ok: }if (usb_write (usb, fd_vector[i].data+pos, size) != size) {host_print ("could not send file to target\n" ); -exit (1 ); +panic (t_restore); }break ;case USBBOOT_FS_CMD_END :
@@ -329,38 +335,48 @@ int usb_boot(struct termios tn;struct file_data fd_vector[MAX_OPEN_FILES ]; -read_asic_id (usb); +if (read_asic_id (usb)) +return -1 ;printf ("sending xload to target...\n" ); +usleep (1000 );usb_write (usb, &msg_boot,sizeof (msg_boot)); +usleep (1000 );usb_write (usb, &msg_size,sizeof (msg_size)); +usleep (1000 );usb_write (usb, data, sz); +usleep (100000 );munmap (data, msg_size);for (i =0 ; i <MAX_OPEN_FILES ; i++) fd_vector[i].data =NULL ; vars.usb = usb; - vars.hide =0 ; -tcgetattr (STDIN_FILENO , &vars.to); - tn = vars.to; +pthread_mutex_init (&vars.usb_mutex,NULL ); +tcgetattr (STDIN_FILENO , &vars.t_restore); + tn = vars.t_restore; tn.c_lflag &= ~(ICANON |ECHO );printf (FORMAT ,TARGET_FORMAT );tcsetattr (STDIN_FILENO ,TCSANOW , &tn);if (pthread_create (&thread,NULL , listenerTask, &vars))host_print ("listenerTask failed\n" );for (;;) { +usleep (100 );if (usb_read (usb, &i,4 ) !=4 )break ;if (i ==USBBOOT_FS_MAGIC ) { - vars.hide =1 ; -process_file (usb, rootfs, fd_vector); - vars.hide =0 ; +usleep (100 ); +pthread_mutex_lock (&vars.usb_mutex); +process_file (usb, rootfs, fd_vector, &vars.t_restore); +pthread_mutex_unlock (&vars.usb_mutex);continue ; }printf ("%c" , i);fflush (stdout); } -tcsetattr (STDIN_FILENO ,TCSANOW , &vars.to); +usb_close (usb); +pthread_mutex_destroy (&vars.usb_mutex); +tcsetattr (STDIN_FILENO ,TCSANOW , &vars.t_restore); +printf (FORMAT ,HOST_FORMAT );return 0 ; }
scripts/usb_linux.c +2 -2
@@ -47,7 +47,7 @@#include "usb.h" -#define MAX_RETRIES 5 +#define MAX_RETRIES 2#ifdef TRACE_USB #define DBG1(x...) fprintf(stderr, x)
@@ -350,7 +350,7 @@ int usb_read(struct usb_handle *h, void *_data, int len) n, errno, strerror(errno));if (++retry >MAX_RETRIES )return -1 ; -sleep (1 ); +usleep (10000 ); } }while (n <0 );
Signature · 7 lines
1.8.1.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
PATCH 3/3 ARCHOS: use manufacturer values for pad_conf and reorder initialization
In reply to Vicente Bergas--- arch/arm/boards/archosg9/board.c | 1 + arch/arm/boards/archosg9/lowlevel.c | 18 +- arch/arm/boards/archosg9/mux.c | 654 +++++++++++++----------------------- 3 files changed, 244 insertions(+), 429 deletions(-)
arch/arm/boards/archosg9/board.c +1 -0
@@ -58,6 +58,7 @@ static int archosg9_devices_init(void){* So here there is the hardcoded value */ armlinux_set_architecture (5032 ); +armlinux_set_revision (5 );return 0 ; }
arch/arm/boards/archosg9/lowlevel.c +8 -8
@@ -39,12 +39,19 @@ static const struct ddr_regs ddr_regs_400_mhz_2cs = { static noinline void archosg9_init_lowlevel(void) {struct dpll_param core =OMAP4_CORE_DPLL_PARAM_19M2_DDR400 ; -struct dpll_param mpu =OMAP4_MPU_DPLL_PARAM_19M2_MPU600 ; +struct dpll_param mpu =OMAP4_MPU_DPLL_PARAM_19M2_MPU1200 ;struct dpll_param iva =OMAP4_IVA_DPLL_PARAM_19M2 ;struct dpll_param per =OMAP4_PER_DPLL_PARAM_19M2 ;struct dpll_param abe =OMAP4_ABE_DPLL_PARAM_19M2 ;struct dpll_param usb =OMAP4_USB_DPLL_PARAM_19M2 ; +set_muxconf_regs (); + +/* Set VCORE1 = 1.3 V, VCORE2 = VCORE3 = 1.21V */ +omap4_scale_vcores (TPS62361_VSEL0_GPIO ); + +/* Enable all clocks */ +omap4_enable_all_clocks ();writel (CM_SYS_CLKSEL_19M2 ,CM_SYS_CLKSEL );/* Configure all DPLL's at 100% OPP */
@@ -54,15 +63,8 @@ static noinline void archosg9_init_lowlevel(void)omap4_configure_abe_dpll (&abe);omap4_configure_usb_dpll (&usb); -/* Enable all clocks */ -omap4_enable_all_clocks (); - -set_muxconf_regs (); -omap4_ddr_init (&ddr_regs_400_mhz_2cs, &core); -/* Set VCORE1 = 1.3 V, VCORE2 = VCORE3 = 1.21V */ -omap4_scale_vcores (TPS62361_VSEL0_GPIO );board_init_lowlevel_return (); }
arch/arm/boards/archosg9/mux.c +233 -421
669 lines not on this page · raw message
Signature · 7 lines
1.8.1.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Sascha Hauer
AppliedQuoted 7 lines · Vicente Bergas
.- in omap4 OPP use recommended values from datasheet
.- when booting an omap4 through usb it failed from time to time
this patch solves this problem
.- on archos g9 tablet, use the samepad_confvalues readden from linux
when booting with avboot (archos own bootloader)
.- also on archos g9 tablet reorder initialization: first voltages then clocks
Quoted 5 lines
Vicente Bergas (3):
OMAP4: use OPPs recommended in datasheet
OMAP4_USB: more stable communications
ARCHOS: use manufacturer values forpad_confand reorder
initialization
Applied, thanks
Sascha
Quoted 18 lines
arch/arm/boards/archosg9/board.c | 1 + arch/arm/boards/archosg9/lowlevel.c | 18 +- arch/arm/boards/archosg9/mux.c | 654 +++++++++----------------- arch/arm/mach-omap/include/mach/omap4-clock.h | 12 +- scripts/omap4_usbboot.c | 68 ++- scripts/usb_linux.c | 4 +- 6 files changed, 295 insertions(+), 462 deletions(-)Signature · 7 lines
1.8.1.1 _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox
Signature · 9 lines
Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list [email protected] http://lists.infradead.org/mailman/listinfo/barebox