omap updates for 2.6.36 merge window
Subsystems (6)
Tony Lindgren
maintainercover omap updates for 2.6.36 merge window
Hi all,
Here are some omap updates for the upcoming merge window.
Regards,
Tony
---
Cory Maccarrone (1):
omap1: omap7xx clocks, mux, serial fixes
Grazvydas Ignotas (1):
omap: mux: fix multipath gpio handling
Kan-Ru Chen (3):
omap: Add new interface omap_get_die_id
omap: Use omap_get_die_id() to get the DIE ids
omap: Devkit8000: Use DIE id to initialize dm9000 MAC address
Mike Rapoport (1):
omap3: introduce omap3_map_io
Nishanth Menon (1):
omap2/3: id: fix sparse warning
Samu Onkalo (1):
omap: dma: Support for prefetch in destination synchronizedtransfer
Sergio Aguirre (1):
omap3: Unify omap2_set_globals_3[43,6x]x functions
Steve Sakoman (1):
omap: Overo: Fix support for second ethernet port
Tony Lindgren (2):
omap: Add back UART MDR1 check into uncompress.h
omap2: Fix GPIO numbers and smc91x for 2430sdp
stanley.miao (1):
OMAP3: AM3505/3517 do not have IO wakeup capability
arch/arm/mach-omap1/clock_data.c | 20 ++++++++++ arch/arm/mach-omap1/mux.c | 4 ++ arch/arm/mach-omap1/serial.c | 7 ++++ arch/arm/mach-omap2/board-2430sdp.c | 6 +-- arch/arm/mach-omap2/board-3430sdp.c | 8 +--- arch/arm/mach-omap2/board-3630sdp.c | 8 +--- arch/arm/mach-omap2/board-am3517evm.c | 8 +--- arch/arm/mach-omap2/board-cm-t35.c | 8 +--- arch/arm/mach-omap2/board-devkit8000.c | 22 ++++++++--- arch/arm/mach-omap2/board-igep0020.c | 8 +--- arch/arm/mach-omap2/board-ldp.c | 8 +--- arch/arm/mach-omap2/board-omap3beagle.c | 8 +--- arch/arm/mach-omap2/board-omap3evm.c | 8 +--- arch/arm/mach-omap2/board-omap3pandora.c | 8 +--- arch/arm/mach-omap2/board-omap3stalker.c | 8 +--- arch/arm/mach-omap2/board-omap3touchbook.c | 8 +--- arch/arm/mach-omap2/board-overo.c | 50 +++++++++++++++++++++----- arch/arm/mach-omap2/board-rx51.c | 2 + arch/arm/mach-omap2/board-zoom2.c | 8 +--- arch/arm/mach-omap2/board-zoom3.c | 8 +--- arch/arm/mach-omap2/id.c | 36 ++++++++++++------- arch/arm/mach-omap2/include/mach/id.h | 22 +++++++++++ arch/arm/mach-omap2/mux.c | 38 ++++++++++---------- arch/arm/mach-omap2/pm34xx.c | 7 ++-- arch/arm/plat-omap/common.c | 10 +++-- arch/arm/plat-omap/dma.c | 11 ++++-- arch/arm/plat-omap/gpio.c | 4 ++ arch/arm/plat-omap/include/plat/common.h | 5 ++- arch/arm/plat-omap/include/plat/cpu.h | 2 + arch/arm/plat-omap/include/plat/dma.h | 1 + arch/arm/plat-omap/include/plat/mux.h | 4 ++ arch/arm/plat-omap/include/plat/uncompress.h | 6 +++ 32 files changed, 202 insertions(+), 159 deletions(-) create mode 100644 arch/arm/mach-omap2/include/mach/id.h
Signature · 1 line
Signature
Tony Lindgren
maintainerPATCH 1/13 omap: Add back UART MDR1 check into uncompress.h
Recent DEBUG_LL and uncompress.h changes removed the check_port() as pointed out by Cory Maccarrone <[email protected]>.
This causes some boards to not boot, so add back the MDR1 register check. The MDR1 register tells the mode of omap uart. Based on an earlier patch by Cory Maccarrone <[email protected]>.
--- arch/arm/plat-omap/include/plat/uncompress.h | 6 ++++++ 1 files changed, 6 insertions(+), 0 deletions(-)
arch/arm/plat-omap/include/plat/uncompress.h +6 -0
@@ -25,6 +25,8 @@#include <plat/serial.h> +#define MDR1_MODE_MASK 0x07 +static volatile u8 *uart_base;static int uart_shift;
@@ -42,6 +44,10 @@ static void putc(int c)if (!uart_base)return ; +/* Check for UART 16x mode */ +if ((uart_base[UART_OMAP_MDR1 << uart_shift] &MDR1_MODE_MASK ) !=0 ) +return ; +while (!(uart_base[UART_LSR << uart_shift] &UART_LSR_THRE ))barrier (); uart_base[UART_TX << uart_shift] = c;
Tony Lindgren
maintainerPATCH 2/13 omap1: omap7xx clocks, mux, serial fixes
In reply to Tony LindgrenFrom: Cory Maccarrone <[email protected]>
This change adds in the necessary clocks and mux pins for UART control on omap7xx devices. I also made a change in the serial code to only try and initialize two UARTs in omap_serial_init, as these devices don't have three.
--- arch/arm/mach-omap1/clock_data.c | 20 ++++++++++++++++++++ arch/arm/mach-omap1/mux.c | 4 ++++ arch/arm/mach-omap1/serial.c | 7 +++++++ arch/arm/plat-omap/include/plat/mux.h | 4 ++++ 4 files changed, 35 insertions(+), 0 deletions(-)
arch/arm/mach-omap1/clock_data.c +20 -0
@@ -551,6 +551,24 @@ static struct clk usb_dc_ck7xx = { .enable_bit = SOFT_USB_OTG_DPLL_REQ_SHIFT, }; +static struct clk uart1_7xx = { + .name ="uart1_ck" , + .ops = &clkops_generic, +/* Direct from ULPD, no parent */ + .rate =12000000 , + .enable_reg =OMAP1_IO_ADDRESS (SOFT_REQ_REG ), + .enable_bit =9 , +}; + +static struct clk uart2_7xx = { + .name ="uart2_ck" , + .ops = &clkops_generic, +/* Direct from ULPD, no parent */ + .rate =12000000 , + .enable_reg =OMAP1_IO_ADDRESS (SOFT_REQ_REG ), + .enable_bit =11 , +}; +static struct clk mclk_1510 = { .name ="mclk" , .ops = &clkops_generic,
@@ -697,7 +715,9 @@ static struct omap_clk omap_clks[] = {/* ULPD clocks */ CLK (NULL ,"uart1_ck" , &uart1_1510,CK_1510 |CK_310 ),CLK (NULL ,"uart1_ck" , &uart1_16xx.clk,CK_16XX ), +CLK (NULL ,"uart1_ck" , &uart1_7xx,CK_7XX ),CLK (NULL ,"uart2_ck" , &uart2_ck,CK_16XX |CK_1510 |CK_310 ), +CLK (NULL ,"uart2_ck" , &uart2_7xx,CK_7XX ),CLK (NULL ,"uart3_ck" , &uart3_1510,CK_1510 |CK_310 ),CLK (NULL ,"uart3_ck" , &uart3_16xx.clk,CK_16XX ), CLK(NULL, "usb_clko", &usb_clko, CK_16XX | CK_1510 | CK_310),
arch/arm/mach-omap1/mux.c +4 -0
@@ -70,6 +70,10 @@ MUX_CFG_7XX("SPI_7XX_3", 6, 13, 4, 12, 1, 0) MUX_CFG_7XX("SPI_7XX_4", 6, 17, 4, 16, 1, 0) MUX_CFG_7XX("SPI_7XX_5", 8, 25, 0, 24, 0, 0)MUX_CFG_7XX ("SPI_7XX_6" ,9 ,5 ,0 ,4 ,0 ,0 ) + +/* UART pins */ +MUX_CFG_7XX("UART_7XX_1", 3, 21, 0, 20, 0, 0) +MUX_CFG_7XX ("UART_7XX_2" ,8 ,1 ,6 ,0 ,0 ,0 ) };#define OMAP7XX_PINS_SZ ARRAY_SIZE(omap7xx_pins)#else
arch/arm/mach-omap1/serial.c +7 -0
@@ -122,6 +122,13 @@ void __init omap_serial_init(void)for (i =0 ; i <ARRAY_SIZE (serial_platform_data) -1 ; i++) { +/* Don't look@UARTs higher than 2 for omap7xx */ +if (cpu_is_omap7xx () && i >1 ) { + serial_platform_data[i].membase =NULL ; + serial_platform_data[i].mapbase =0 ; +continue ; + } +/* Static mapping, never released */ serial_platform_data[i].membase =ioremap (serial_platform_data[i].mapbase,SZ_2K );
arch/arm/plat-omap/include/plat/mux.h +4 -0
@@ -173,6 +173,10 @@ enum omap7xx_index {SPI_7XX_4 ,SPI_7XX_5 ,SPI_7XX_6 , + +/* UART */ +UART_7XX_1 , + UART_7XX_2, }; enum omap1xxx_index {
Tony Lindgren
maintainerPATCH 3/13 omap2: Fix GPIO numbers and smc91x for 2430sdp
In reply to Tony LindgrenFix GPIO numbers and smc91x for 2430sdp. The earlier code had cut and paste errors from 3430sdp code. Also, 2430 has five GPIO banks for a total of 160 GPIO lines.
--- arch/arm/mach-omap2/board-2430sdp.c | 6 +----- arch/arm/plat-omap/gpio.c | 4 +++- 2 files changed, 4 insertions(+), 6 deletions(-)
arch/arm/mach-omap2/board-2430sdp.c +1 -5
@@ -122,11 +122,7 @@ static struct omap_smc91x_platform_data board_smc91x_data = {static void __init board_smc91x_init (void ) { -if (omap_rev () >OMAP3430_REV_ES1_0 ) - board_smc91x_data.gpio_irq =6 ; -else - board_smc91x_data.gpio_irq =29 ; - +omap_mux_init_gpio (149 ,OMAP_PIN_INPUT );gpmc_smc91x_init (&board_smc91x_data); }
arch/arm/plat-omap/gpio.c +3 -1
@@ -390,7 +390,9 @@ static inline int gpio_valid(int gpio)return 0 ;if (cpu_is_omap7xx () && gpio <192 )return 0 ; -if (cpu_is_omap24xx () && gpio <128 ) +if (cpu_is_omap2420 () && gpio <128 ) +return 0 ; +if (cpu_is_omap2430 () && gpio <160 )return 0 ;if ((cpu_is_omap34xx () ||cpu_is_omap44xx ()) && gpio <192 )return 0 ;
Tony Lindgren
maintainerPATCH 4/13 omap: Overo: Fix support for second ethernet port
In reply to Tony LindgrenFrom: Steve Sakoman <[email protected]>
The original patch got truncated when applied from patchwork.kernel.org as discussed at:
http://www.mail-archive.com/linux-omap at vger.kernel.org/msg28953.html
This patch supplies the missing chunks.
--- arch/arm/mach-omap2/board-overo.c | 42 +++++++++++++++++++++++++++++++++++-- 1 files changed, 40 insertions(+), 2 deletions(-)
arch/arm/mach-omap2/board-overo.c +40 -2
@@ -166,9 +166,26 @@ static struct platform_device overo_smsc911x_device = { }, }; +static struct platform_device overo_smsc911x2_device = { + .name ="smsc911x" , + .id =1 , + .num_resources =ARRAY_SIZE (overo_smsc911x2_resources), + .resource = overo_smsc911x2_resources, + .dev = { + .platform_data = &overo_smsc911x_config, + }, +}; + +static struct platform_device *smsc911x_devices[] = { + &overo_smsc911x_device, + &overo_smsc911x2_device, +}; +static inline void __init overo_init_smsc911x (void ) { -unsigned long cs_mem_base; +unsigned long cs_mem_base, cs_mem_base2; + +/* set up first smsc911x chip */ if (gpmc_cs_request (OVERO_SMSC911X_CS ,SZ_16M , &cs_mem_base) <0 ) {printk (KERN_ERR "Failed request for GPMC mem for smsc911x\n" );
@@ -189,7 +206,28 @@ static inline void __init overo_init_smsc911x(void) overo_smsc911x_resources[1 ].start =OMAP_GPIO_IRQ (OVERO_SMSC911X_GPIO ); overo_smsc911x_resources[1 ].end =0 ; - platform_device_register(&overo_smsc911x_device); +/* set up second smsc911x chip */ + +if (gpmc_cs_request (OVERO_SMSC911X2_CS ,SZ_16M , &cs_mem_base2) <0 ) { +printk (KERN_ERR "Failed request for GPMC mem for smsc911x2\n" ); +return ; + } + + overo_smsc911x2_resources[0 ].start = cs_mem_base2 +0x0 ; + overo_smsc911x2_resources[0 ].end = cs_mem_base2 +0xff ; + +if ((gpio_request (OVERO_SMSC911X2_GPIO ,"SMSC911X2 IRQ" ) ==0 ) && + (gpio_direction_input (OVERO_SMSC911X2_GPIO ) ==0 )) { +gpio_export (OVERO_SMSC911X2_GPIO ,0 ); + }else { +printk (KERN_ERR "could not obtain gpio for SMSC911X2 IRQ\n" ); +return ; + } + + overo_smsc911x2_resources[1 ].start =OMAP_GPIO_IRQ (OVERO_SMSC911X2_GPIO ); + overo_smsc911x2_resources[1 ].end =0 ; + + platform_add_devices(smsc911x_devices, ARRAY_SIZE(smsc911x_devices)); }#else
Tony Lindgren
maintainerPATCH 5/13 omap2/3: id: fix sparse warning
In reply to Tony LindgrenFrom: Nishanth Menon <[email protected]>
omap24xx_check_revision, omap3_check_features, omap3_check_revision, omap4_check_revision, omap3_cpuinfo are not used elsewhere, it should be static
Also fixes the following sparse warnings:arch/arm/mach-omap2/id.c:105:13: warning: symbol 'omap24xx_check_revision' was not declared. Should it be static? arch/arm/mach-omap2/id.c:167:13: warning: symbol 'omap3_check_features' was not declared. Should it be static? arch/arm/mach-omap2/id.c:189:13: warning: symbol 'omap3_check_revision' was not declared. Should it be static? arch/arm/mach-omap2/id.c:270:13: warning: symbol 'omap4_check_revision' was not declared. Should it be static? arch/arm/mach-omap2/id.c:300:13: warning: symbol 'omap3_cpuinfo' was not declared. Should it be static?
--- arch/arm/mach-omap2/id.c | 10 +++++----- 1 files changed, 5 insertions(+), 5 deletions(-)
arch/arm/mach-omap2/id.c +5 -5
@@ -102,7 +102,7 @@ static struct omap_id omap_ids[] __initdata = {static void __iomem *tap_base;static u16 tap_prod_id; -void __init omap24xx_check_revision (void ) +static void __init omap24xx_check_revision (void ) {int i, j;u32 idcode, prod_id;
@@ -164,7 +164,7 @@ void __init omap24xx_check_revision(void) omap3_features |= OMAP3_HAS_ ##feat; \ } -void __init omap3_check_features (void ) +static void __init omap3_check_features (void ) {u32 status;
@@ -186,7 +186,7 @@ void __init omap3_check_features(void)*/ } -void __init omap3_check_revision (void ) +static void __init omap3_check_revision (void ) {u32 cpuid, idcode;u16 hawkeye;
@@ -267,7 +267,7 @@ void __init omap3_check_revision(void) } } -void __init omap4_check_revision (void ) +static void __init omap4_check_revision (void ) {u32 idcode;u16 hawkeye;
@@ -297,7 +297,7 @@ void __init omap4_check_revision(void) if (omap3_has_ ##feat()) \ printk(#feat" "); -void __init omap3_cpuinfo (void ) +static void __init omap3_cpuinfo (void ) {u8 rev =GET_OMAP_REVISION ();char cpu_name[16 ], cpu_rev[16 ];
Tony Lindgren
maintainerPATCH 6/13 omap3: Unify omap2_set_globals_3[43,6x]x functions
In reply to Tony LindgrenFrom: Sergio Aguirre <[email protected]>
The only difference between them is the physical address of the uart4 port, which is only present in 36xx chips.
We don't really need to care about keeping these 2 functions, since the decision to use uart4 is more cleanly done later when we do have access to omap_revision variable.
--- arch/arm/mach-omap2/board-3430sdp.c | 2 +- arch/arm/mach-omap2/board-3630sdp.c | 2 +- arch/arm/mach-omap2/board-am3517evm.c | 2 +- arch/arm/mach-omap2/board-cm-t35.c | 2 +- arch/arm/mach-omap2/board-devkit8000.c | 2 +- arch/arm/mach-omap2/board-igep0020.c | 2 +- arch/arm/mach-omap2/board-ldp.c | 2 +- arch/arm/mach-omap2/board-omap3beagle.c | 2 +- arch/arm/mach-omap2/board-omap3evm.c | 2 +- arch/arm/mach-omap2/board-omap3pandora.c | 2 +- arch/arm/mach-omap2/board-omap3stalker.c | 2 +- arch/arm/mach-omap2/board-omap3touchbook.c | 2 +- arch/arm/mach-omap2/board-overo.c | 2 +- arch/arm/mach-omap2/board-rx51.c | 2 +- arch/arm/mach-omap2/board-zoom2.c | 2 +- arch/arm/mach-omap2/board-zoom3.c | 2 +- arch/arm/plat-omap/common.c | 10 ++-------- arch/arm/plat-omap/include/plat/common.h | 3 +-- 18 files changed, 19 insertions(+), 26 deletions(-)
arch/arm/mach-omap2/board-3430sdp.c +1 -1
@@ -805,7 +805,7 @@ static void __init omap_3430sdp_init(void)static void __init omap_3430sdp_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-3630sdp.c +1 -1
@@ -67,7 +67,7 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = {static void __init omap_sdp_map_io (void ) { -omap2_set_globals_36xx (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-am3517evm.c +1 -1
@@ -463,7 +463,7 @@ static void __init am3517_evm_init(void)static void __init am3517_evm_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-cm-t35.c +1 -1
@@ -710,7 +710,7 @@ static void __init cm_t35_init_irq(void)static void __init cm_t35_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-devkit8000.c +1 -1
@@ -810,7 +810,7 @@ static void __init devkit8000_init(void)static void __init devkit8000_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-igep0020.c +1 -1
@@ -534,7 +534,7 @@ static void __init igep2_init(void)static void __init igep2_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-ldp.c +1 -1
@@ -408,7 +408,7 @@ static void __init omap_ldp_init(void)static void __init omap_ldp_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-omap3beagle.c +1 -1
@@ -509,7 +509,7 @@ static void __init omap3_beagle_init(void)static void __init omap3_beagle_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-omap3evm.c +1 -1
@@ -717,7 +717,7 @@ static void __init omap3_evm_init(void)static void __init omap3_evm_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-omap3pandora.c +1 -1
@@ -702,7 +702,7 @@ static void __init omap3pandora_init(void)static void __init omap3pandora_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-omap3stalker.c +1 -1
@@ -654,7 +654,7 @@ static void __init omap3_stalker_init(void)static void __init omap3_stalker_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-omap3touchbook.c +1 -1
@@ -561,7 +561,7 @@ static void __init omap3_touchbook_init(void)static void __init omap3_touchbook_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-overo.c +1 -1
@@ -524,7 +524,7 @@ static void __init overo_init(void)static void __init overo_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-rx51.c +1 -1
@@ -143,7 +143,7 @@ static void __init rx51_init(void)static void __init rx51_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();rx51_video_mem_init ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-zoom2.c +1 -1
@@ -99,7 +99,7 @@ static void __init omap_zoom2_init(void)static void __init omap_zoom2_map_io (void ) { -omap2_set_globals_343x (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/mach-omap2/board-zoom3.c +1 -1
@@ -27,7 +27,7 @@static void __init omap_zoom_map_io (void ) { -omap2_set_globals_36xx (); +omap2_set_globals_3xxx ();omap34xx_map_common_io (); }
arch/arm/plat-omap/common.c +2 -8
@@ -309,19 +309,13 @@ static struct omap_globals omap3_globals = { .uart1_phys = OMAP3_UART1_BASE, .uart2_phys = OMAP3_UART2_BASE, .uart3_phys = OMAP3_UART3_BASE, + .uart4_phys = OMAP3_UART4_BASE, /* Only on 3630 */ }; -void __init omap2_set_globals_343x (void ) +void __init omap2_set_globals_3xxx (void ) {__omap2_set_globals (&omap3_globals); } - -void __init omap2_set_globals_36xx (void ) -{ - omap3_globals.uart4_phys =OMAP3_UART4_BASE ; - -__omap2_set_globals (&omap3_globals); -}#endif #if defined(CONFIG_ARCH_OMAP4 )
arch/arm/plat-omap/include/plat/common.h +1 -2
@@ -56,8 +56,7 @@ struct omap_globals {void omap2_set_globals_242x (void );void omap2_set_globals_243x (void ); -void omap2_set_globals_343x (void ); -void omap2_set_globals_36xx (void ); +void omap2_set_globals_3xxx (void );void omap2_set_globals_443x (void );/* These get called from omap2_set_globals_xxxx(), do not call these */
Tony Lindgren
maintainerPATCH 7/13 omap3: introduce omap3_map_io
In reply to Tony LindgrenFrom: Mike Rapoport <[email protected]>
Most OMAP3-based boards use exactly the same code for .map_io method in the machine_desc structure.
This patch introduces omap3_map_io and updates board-* files to use it as .map_io method.
--- arch/arm/mach-omap2/board-3430sdp.c | 8 +------- arch/arm/mach-omap2/board-3630sdp.c | 8 +------- arch/arm/mach-omap2/board-am3517evm.c | 8 +------- arch/arm/mach-omap2/board-cm-t35.c | 8 +------- arch/arm/mach-omap2/board-devkit8000.c | 8 +------- arch/arm/mach-omap2/board-igep0020.c | 8 +------- arch/arm/mach-omap2/board-ldp.c | 8 +------- arch/arm/mach-omap2/board-omap3beagle.c | 8 +------- arch/arm/mach-omap2/board-omap3evm.c | 8 +------- arch/arm/mach-omap2/board-omap3pandora.c | 8 +------- arch/arm/mach-omap2/board-omap3stalker.c | 8 +------- arch/arm/mach-omap2/board-omap3touchbook.c | 8 +------- arch/arm/mach-omap2/board-overo.c | 8 +------- arch/arm/mach-omap2/board-zoom2.c | 8 +------- arch/arm/mach-omap2/board-zoom3.c | 8 +------- arch/arm/plat-omap/common.c | 6 ++++++ arch/arm/plat-omap/include/plat/common.h | 2 ++ 17 files changed, 23 insertions(+), 105 deletions(-)
arch/arm/mach-omap2/board-3430sdp.c +1 -7
@@ -803,18 +803,12 @@ static void __init omap_3430sdp_init(void)usb_ehci_init (&ehci_pdata); } -static void __init omap_3430sdp_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP_3430SDP ,"OMAP3430 3430SDP board" )/* Maintainer: Syed Khasim - Texas Instruments Inc */ .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap_3430sdp_map_io, + .map_io = omap3_map_io, .init_irq = omap_3430sdp_init_irq, .init_machine = omap_3430sdp_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-3630sdp.c +1 -7
@@ -65,12 +65,6 @@ static const struct ehci_hcd_omap_platform_data ehci_pdata __initconst = { .reset_gpio_port[2] = -EINVAL }; -static void __init omap_sdp_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -static struct omap_board_config_kernel sdp_config[]__initdata = { };
@@ -106,7 +100,7 @@ MACHINE_START(OMAP_3630SDP, "OMAP 3630SDP board") .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap_sdp_map_io, + .map_io = omap3_map_io, .init_irq = omap_sdp_init_irq, .init_machine = omap_sdp_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-am3517evm.c +1 -7
@@ -461,17 +461,11 @@ static void __init am3517_evm_init(void)am3517_evm_ethernet_init (&am3517_evm_emac_pdata); } -static void __init am3517_evm_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP3517EVM ,"OMAP3517/AM3517 EVM" ) .phys_io = 0x48000000, .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = am3517_evm_map_io, + .map_io = omap3_map_io, .init_irq = am3517_evm_init_irq, .init_machine = am3517_evm_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-cm-t35.c +1 -7
@@ -708,12 +708,6 @@ static void __init cm_t35_init_irq(void)omap_gpio_init (); } -static void __init cm_t35_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -static struct omap_board_mux board_mux[]__initdata = {/* nCS and IRQ for CM-T35 ethernet */ OMAP3_MUX (GPMC_NCS5 ,OMAP_MUX_MODE0 ),
@@ -836,7 +830,7 @@ MACHINE_START(CM_T35, "Compulab CM-T35") .phys_io = 0x48000000, .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = cm_t35_map_io, + .map_io = omap3_map_io, .init_irq = cm_t35_init_irq, .init_machine = cm_t35_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-devkit8000.c +1 -7
@@ -808,17 +808,11 @@ static void __init devkit8000_init(void)omap_mux_init_signal ("sdrc_cke1" ,OMAP_PIN_OUTPUT ); } -static void __init devkit8000_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (DEVKIT8000 ,"OMAP3 Devkit8000" ) .phys_io = 0x48000000, .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = devkit8000_map_io, + .map_io = omap3_map_io, .init_irq = devkit8000_init_irq, .init_machine = devkit8000_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-igep0020.c +1 -7
@@ -532,17 +532,11 @@ static void __init igep2_init(void)pr_warning ("IGEP v2: Could not obtain gpio GPIO_WIFI_NRESET\n" ); } -static void __init igep2_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (IGEP0020 ,"IGEP v2 board" ) .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = igep2_map_io, + .map_io = omap3_map_io, .init_irq = igep2_init_irq, .init_machine = igep2_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-ldp.c +1 -7
@@ -406,17 +406,11 @@ static void __init omap_ldp_init(void) ldp_vmmc1_supply.dev = mmc[0 ].dev; } -static void __init omap_ldp_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP_LDP ,"OMAP LDP board" ) .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap_ldp_map_io, + .map_io = omap3_map_io, .init_irq = omap_ldp_init_irq, .init_machine = omap_ldp_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-omap3beagle.c +1 -7
@@ -507,18 +507,12 @@ static void __init omap3_beagle_init(void)beagle_display_init (); } -static void __init omap3_beagle_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP3_BEAGLE ,"OMAP3 Beagle Board" )/* Maintainer: Syed Mohammed Khasim - http://beagleboard.org */ .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap3_beagle_map_io, + .map_io = omap3_map_io, .init_irq = omap3_beagle_init_irq, .init_machine = omap3_beagle_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-omap3evm.c +1 -7
@@ -715,18 +715,12 @@ static void __init omap3_evm_init(void)omap3_evm_display_init (); } -static void __init omap3_evm_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP3EVM ,"OMAP3 EVM" )/* Maintainer: Syed Mohammed Khasim - Texas Instruments */ .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap3_evm_map_io, + .map_io = omap3_map_io, .init_irq = omap3_evm_init_irq, .init_machine = omap3_evm_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-omap3pandora.c +1 -7
@@ -700,17 +700,11 @@ static void __init omap3pandora_init(void)omap_mux_init_signal ("sdrc_cke1" ,OMAP_PIN_OUTPUT ); } -static void __init omap3pandora_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP3_PANDORA ,"Pandora Handheld Console" ) .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap3pandora_map_io, + .map_io = omap3_map_io, .init_irq = omap3pandora_init_irq, .init_machine = omap3pandora_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-omap3stalker.c +1 -7
@@ -652,18 +652,12 @@ static void __init omap3_stalker_init(void)omap_mux_init_signal ("sdr_cke1" ,OMAP_PIN_OUTPUT ); } -static void __init omap3_stalker_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (SBC3530 ,"OMAP3 STALKER" )/* Maintainer: Jason Lam -lzg at ema-tech.com */ .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap3_stalker_map_io, + .map_io = omap3_map_io, .init_irq = omap3_stalker_init_irq, .init_machine = omap3_stalker_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-omap3touchbook.c +1 -7
@@ -559,18 +559,12 @@ static void __init omap3_touchbook_init(void)omap_mux_init_signal ("sdrc_cke1" ,OMAP_PIN_OUTPUT ); } -static void __init omap3_touchbook_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (TOUCHBOOK ,"OMAP3 touchbook Board" )/* Maintainer: Gregoire Gentil - http://www.alwaysinnovating.com */ .phys_io = 0x48000000, .io_pg_offst = ((0xd8000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap3_touchbook_map_io, + .map_io = omap3_map_io, .init_irq = omap3_touchbook_init_irq, .init_machine = omap3_touchbook_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-overo.c +1 -7
@@ -522,17 +522,11 @@ static void __init overo_init(void) "OVERO_GPIO_USBH_CPEN\n"); } -static void __init overo_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OVERO ,"Gumstix Overo" ) .phys_io = 0x48000000, .io_pg_offst = ((0xfa000000) >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = overo_map_io, + .map_io = omap3_map_io, .init_irq = overo_init_irq, .init_machine = overo_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-zoom2.c +1 -7
@@ -97,17 +97,11 @@ static void __init omap_zoom2_init(void)zoom_debugboard_init (); } -static void __init omap_zoom2_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -MACHINE_START (OMAP_ZOOM2 ,"OMAP Zoom2 board" ) .phys_io = ZOOM_UART_BASE, .io_pg_offst = (ZOOM_UART_VIRT >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap_zoom2_map_io, + .map_io = omap3_map_io, .init_irq = omap_zoom2_init_irq, .init_machine = omap_zoom2_init, .timer = &omap_timer,
arch/arm/mach-omap2/board-zoom3.c +1 -7
@@ -25,12 +25,6 @@#include "mux.h" #include "sdram-hynix-h8mbx00u0mer-0em.h" -static void __init omap_zoom_map_io (void ) -{ -omap2_set_globals_3xxx (); -omap34xx_map_common_io (); -} -static struct omap_board_config_kernel zoom_config[]__initdata = { };
@@ -89,7 +83,7 @@ MACHINE_START(OMAP_ZOOM3, "OMAP Zoom3 board") .phys_io = ZOOM_UART_BASE, .io_pg_offst = (ZOOM_UART_VIRT >> 18) & 0xfffc, .boot_params = 0x80000100, - .map_io = omap_zoom_map_io, + .map_io = omap3_map_io, .init_irq = omap_zoom_init_irq, .init_machine = omap_zoom_init, .timer = &omap_timer,
arch/arm/plat-omap/common.c +6 -0
@@ -316,6 +316,12 @@ void __init omap2_set_globals_3xxx(void) {__omap2_set_globals (&omap3_globals); } + +void __init omap3_map_io (void ) +{ +omap2_set_globals_3xxx (); +omap34xx_map_common_io (); +}#endif #if defined(CONFIG_ARCH_OMAP4 )
arch/arm/plat-omap/include/plat/common.h +2 -0
@@ -66,6 +66,8 @@ void omap2_set_globals_control(struct omap_globals *);void omap2_set_globals_prcm (struct omap_globals *);void omap2_set_globals_uart (struct omap_globals *); +void omap3_map_io (void ); +/** * omap_test_timeout - busy-loop, testing a condition * @cond: condition to test until it evaluates to true
Tony Lindgren
maintainerPATCH 8/13 omap: mux: fix multipath gpio handling
In reply to Tony LindgrenFrom: Grazvydas Ignotas <[email protected]>
OMAP3530 CBB package can have GPIO126 muxed on 2 pins: mmc1_dat4 and cam_strobe. This causes a problem with current multipath GPIO mux handling, which muxes both pins as GPIO126 and makes the GPIO unusable.
Fix this by not muxing any pins if multipath GPIO is detected and just print a warning instead. It's up to board files to set correct mux using omap_mux_init_signal and pin name.
--- arch/arm/mach-omap2/mux.c | 38 ++++++++++++++++++++------------------ 1 files changed, 20 insertions(+), 18 deletions(-)
arch/arm/mach-omap2/mux.c +20 -18
@@ -87,6 +87,9 @@ static char *omap_mux_options;int __init omap_mux_init_gpio (int gpio,int val) {struct omap_mux_entry *e; +struct omap_mux *gpio_mux; +u16 old_mode; +u16 mux_mode;int found =0 ;if (!gpio)
@@ -95,34 +98,33 @@ int __init omap_mux_init_gpio(int gpio, int val)list_for_each_entry (e, &muxmodes, node) {struct omap_mux *m = &e->mux;if (gpio == m->gpio) { -u16 old_mode; -u16 mux_mode; - - old_mode =omap_mux_read (m->reg_offset); - mux_mode = val & ~(OMAP_MUX_NR_MODES -1 ); -if (omap_mux_flags &MUXABLE_GPIO_MODE3 ) - mux_mode |=OMAP_MUX_MODE3 ; -else - mux_mode |=OMAP_MUX_MODE4 ; -printk (KERN_DEBUG "mux: Setting signal " -"%s.gpio%i 0x%04x -> 0x%04x\n" , - m->muxnames[0 ], gpio, old_mode, mux_mode); -omap_mux_write (mux_mode, m->reg_offset); + gpio_mux = m; found++; } } -if (found ==1 ) -return 0 ; +if (found ==0 ) { +printk (KERN_ERR "mux: Could not set gpio%i\n" , gpio); +return -ENODEV ; + }if (found >1 ) { -printk (KERN_ERR "mux: Multiple gpio paths for gpio%i\n" , gpio); +printk (KERN_INFO "mux: Multiple gpio paths (%d) for gpio%i\n" , + found, gpio);return -EINVAL ; } -printk (KERN_ERR "mux: Could not set gpio%i\n" , gpio); + old_mode =omap_mux_read (gpio_mux->reg_offset); + mux_mode = val & ~(OMAP_MUX_NR_MODES -1 ); +if (omap_mux_flags &MUXABLE_GPIO_MODE3 ) + mux_mode |=OMAP_MUX_MODE3 ; +else + mux_mode |=OMAP_MUX_MODE4 ; +printk (KERN_DEBUG "mux: Setting signal %s.gpio%i 0x%04x -> 0x%04x\n" , + gpio_mux->muxnames[0 ], gpio, old_mode, mux_mode); +omap_mux_write (mux_mode, gpio_mux->reg_offset); -return -ENODEV ; +return 0 ; }int __init omap_mux_init_signal (char *muxname,int val)
Tony Lindgren
maintainerPATCH 9/13 omap: dma: Support for prefetch in destination synchronizedtransfer
In reply to Tony LindgrenFrom: Samu Onkalo <[email protected]>
Omap DMA controller can prefetch data in advance in case of destination synchronized data transfer. This may increase performance when target HW block doesn't have fifo.
Data is waiting for transfer request in DMA fifo instead of read from memory.
--- arch/arm/plat-omap/dma.c | 11 +++++++---- arch/arm/plat-omap/include/plat/dma.h | 1 + 2 files changed, 8 insertions(+), 4 deletions(-)
arch/arm/plat-omap/dma.c +7 -4
@@ -290,7 +290,7 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count, val =dma_read (CCR (lch));/* DMA_SYNCHRO_CONTROL_UPPER depends on the channel number */ - val &= ~((3 <<19 ) |0x1f ); + val &= ~((1 <<23 ) | (3 <<19 ) |0x1f ); val |= (dma_trigger & ~0x1f ) <<14 ; val |= dma_trigger &0x1f ;
@@ -304,11 +304,14 @@ void omap_set_dma_transfer_params(int lch, int data_type, int elem_count,else val &= ~(1 <<18 ); -if (src_or_dst_synch) +if (src_or_dst_synch ==OMAP_DMA_DST_SYNC_PREFETCH ) { + val &= ~(1 <<24 );/* dest synch */ + val |= (1 <<23 );/* Prefetch */ + }else if (src_or_dst_synch) { val |=1 <<24 ;/* source synch */ -else + }else { val &= ~(1 <<24 );/* dest synch */ - + }dma_write (val,CCR (lch)); }
arch/arm/plat-omap/include/plat/dma.h +1 -0
@@ -345,6 +345,7 @@#define OMAP_DMA_SYNC_BLOCK 0x02#define OMAP_DMA_SYNC_PACKET 0x03 +#define OMAP_DMA_DST_SYNC_PREFETCH 0x02#define OMAP_DMA_SRC_SYNC 0x01#define OMAP_DMA_DST_SYNC 0x00
Tony Lindgren
maintainerPATCH 10/13 OMAP3: AM3505/3517 do not have IO wakeup capability
In reply to Tony LindgrenFrom: stanley.miao <[email protected]>
AM3505/3517 doesn't have IO wakeup capability, so we do not need to set the bit OMAP3430_EN_IO and the bit OMAP3430_EN_IO_CHAIN in the register PM_WKEN_WKUP when the system enters suspend state.
Tested on AM3517EVM and OMAP3530EVM.
--- arch/arm/mach-omap2/id.c | 2 ++ arch/arm/mach-omap2/pm34xx.c | 7 ++++--- arch/arm/plat-omap/include/plat/cpu.h | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-)
arch/arm/mach-omap2/id.c +2 -0
@@ -179,6 +179,8 @@ static void __init omap3_check_features(void)OMAP3_CHECK_FEATURE (status,ISP );if (cpu_is_omap3630 ()) omap3_features |=OMAP3_HAS_192MHZ_CLK ; +if (!cpu_is_omap3505 () && !cpu_is_omap3517 ()) + omap3_features |=OMAP3_HAS_IO_WAKEUP ;/* * TODO: Get additional info (where applicable)
arch/arm/mach-omap2/pm34xx.c +4 -3
@@ -385,8 +385,9 @@ void omap_sram_idle(void)/* Enable IO-PAD and IO-CHAIN wakeups */ per_next_state =pwrdm_read_next_pwrst (per_pwrdm); core_next_state =pwrdm_read_next_pwrst (core_pwrdm); -if (per_next_state <PWRDM_POWER_ON || - core_next_state <PWRDM_POWER_ON ) { +if (omap3_has_io_wakeup () && \ + (per_next_state <PWRDM_POWER_ON || + core_next_state <PWRDM_POWER_ON )) {prm_set_mod_reg_bits (OMAP3430_EN_IO_MASK ,WKUP_MOD ,PM_WKEN );omap3_enable_io_chain (); }
@@ -479,7 +480,7 @@ void omap_sram_idle(void) }/* Disable IO-PAD and IO-CHAIN wakeup */ -if (core_next_state <PWRDM_POWER_ON ) { +if (omap3_has_io_wakeup () && core_next_state <PWRDM_POWER_ON ) {prm_clear_mod_reg_bits (OMAP3430_EN_IO_MASK ,WKUP_MOD ,PM_WKEN );omap3_disable_io_chain (); }
arch/arm/plat-omap/include/plat/cpu.h +2 -0
@@ -444,6 +444,7 @@ extern u32 omap3_features;#define OMAP3_HAS_NEON BIT(3)#define OMAP3_HAS_ISP BIT(4)#define OMAP3_HAS_192MHZ_CLK BIT(5) +#define OMAP3_HAS_IO_WAKEUP BIT(6)#define OMAP3_HAS_FEATURE (feat,flag) \ static inline unsigned int omap3_has_ ##feat(void) \
@@ -457,5 +458,6 @@ OMAP3_HAS_FEATURE(iva, IVA) OMAP3_HAS_FEATURE(neon, NEON) OMAP3_HAS_FEATURE(isp, ISP) OMAP3_HAS_FEATURE(192mhz_clk, 192MHZ_CLK) +OMAP3_HAS_FEATURE(io_wakeup, IO_WAKEUP)#endif
Tony Lindgren
maintainerPATCH 11/13 omap: Add new interface omap_get_die_id
In reply to Tony LindgrenFrom: Kan-Ru Chen <[email protected]>
Allow DIE id to be get and used by others.
--- arch/arm/mach-omap2/id.c | 10 ++++++++++ arch/arm/mach-omap2/include/mach/id.h | 22 ++++++++++++++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-) create mode 100644 arch/arm/mach-omap2/include/mach/id.h
arch/arm/mach-omap2/id.c +10 -0
@@ -25,6 +25,8 @@#include <plat/control.h> #include <plat/cpu.h> +#include <mach/id.h> +static struct omap_chip_id omap_chip;static unsigned int omap_revision;
@@ -102,6 +104,14 @@ static struct omap_id omap_ids[] __initdata = {static void __iomem *tap_base;static u16 tap_prod_id; +void omap_get_die_id (struct omap_die_id *odi) +{ + odi->id_0 =read_tap_reg (OMAP_TAP_DIE_ID_0 ); + odi->id_1 =read_tap_reg (OMAP_TAP_DIE_ID_1 ); + odi->id_2 =read_tap_reg (OMAP_TAP_DIE_ID_2 ); + odi->id_3 =read_tap_reg (OMAP_TAP_DIE_ID_3 ); +} +static void __init omap24xx_check_revision (void ) {int i, j;
arch/arm/mach-omap2/include/mach/id.h new file +22 -0
@@ -0,0 +1,22 @@ +/* +* OMAP2 CPU identification code +* +* Copyright (C) 2010 Kan-Ru Chen <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +*/ +#ifndef OMAP2_ARCH_ID_H +#define OMAP2_ARCH_ID_H + +struct omap_die_id { +u32 id_0; +u32 id_1; +u32 id_2; +u32 id_3; +}; + +void omap_get_die_id (struct omap_die_id *odi); + +#endif
Tony Lindgren
maintainerPATCH 12/13 omap: Use omap_get_die_id() to get the DIE ids
In reply to Tony LindgrenFrom: Kan-Ru Chen <[email protected]>
--- arch/arm/mach-omap2/id.c | 14 ++++++-------- 1 files changed, 6 insertions(+), 8 deletions(-)
arch/arm/mach-omap2/id.c +6 -8
@@ -118,24 +118,22 @@ static void __init omap24xx_check_revision(void)u32 idcode, prod_id;u16 hawkeye;u8 dev_type, rev; +struct omap_die_id odi; idcode =read_tap_reg (OMAP_TAP_IDCODE ); prod_id =read_tap_reg (tap_prod_id); hawkeye = (idcode >>12 ) &0xffff ; rev = (idcode >>28 ) &0x0f ; dev_type = (prod_id >>16 ) &0x0f ; +omap_get_die_id (&odi);pr_debug ("OMAP_TAP_IDCODE 0x%08x REV %i HAWKEYE 0x%04x MANF %03x\n" , idcode, rev, hawkeye, (idcode >>1 ) &0x7ff ); -pr_debug ("OMAP_TAP_DIE_ID_0: 0x%08x\n" , -read_tap_reg (OMAP_TAP_DIE_ID_0 )); +pr_debug ("OMAP_TAP_DIE_ID_0: 0x%08x\n" , odi.id_0);pr_debug ("OMAP_TAP_DIE_ID_1: 0x%08x DEV_REV: %i\n" , -read_tap_reg (OMAP_TAP_DIE_ID_1 ), - (read_tap_reg (OMAP_TAP_DIE_ID_1 ) >>28 ) &0xf ); -pr_debug ("OMAP_TAP_DIE_ID_2: 0x%08x\n" , -read_tap_reg (OMAP_TAP_DIE_ID_2 )); -pr_debug ("OMAP_TAP_DIE_ID_3: 0x%08x\n" , -read_tap_reg (OMAP_TAP_DIE_ID_3 )); + odi.id_1, (odi.id_1 >>28 ) &0xf ); +pr_debug ("OMAP_TAP_DIE_ID_2: 0x%08x\n" , odi.id_2); +pr_debug ("OMAP_TAP_DIE_ID_3: 0x%08x\n" , odi.id_3);pr_debug ("OMAP_TAP_PROD_ID_0: 0x%08x DEV_TYPE: %i\n" , prod_id, dev_type);
Tony Lindgren
maintainerPATCH 13/13 omap: Devkit8000: Use DIE id to initialize dm9000 MAC address
In reply to Tony LindgrenFrom: Kan-Ru Chen <[email protected]>
The devkit8000 boards often come with empty EEPROM thus without valid ethernet MAC address. The DIE id to MAC formula is copied from u-boot.
--- arch/arm/mach-omap2/board-devkit8000.c | 14 ++++++++++++++ 1 files changed, 14 insertions(+), 0 deletions(-)
arch/arm/mach-omap2/board-devkit8000.c +14 -0
@@ -33,6 +33,7 @@#include <linux/i2c/twl.h> #include <mach/hardware.h> +#include <mach/id.h> #include <asm/mach-types.h> #include <asm/mach/arch.h> #include <asm/mach/map.h>
@@ -556,6 +557,9 @@ static struct platform_device omap_dm9000_dev = {static void __init omap_dm9000_init (void ) { +unsigned char *eth_addr = omap_dm9000_platdata.dev_addr; +struct omap_die_id odi; +if (gpio_request (OMAP_DM9000_GPIO_IRQ ,"dm9000 irq" ) <0 ) {printk (KERN_ERR "Failed to request GPIO%d for dm9000 IRQ\n" ,OMAP_DM9000_GPIO_IRQ );
@@ -563,6 +567,16 @@ static void __init omap_dm9000_init(void) }gpio_direction_input (OMAP_DM9000_GPIO_IRQ ); + +/* init the mac address using DIE id */ +omap_get_die_id (&odi); + + eth_addr[0 ] =0x02 ;/* locally administered */ + eth_addr[1 ] = odi.id_1 &0xff ; + eth_addr[2 ] = (odi.id_0 &0xff000000 ) >>24 ; + eth_addr[3 ] = (odi.id_0 &0x00ff0000 ) >>16 ; + eth_addr[4 ] = (odi.id_0 &0x0000ff00 ) >>8 ; + eth_addr[5 ] = (odi.id_0 &0x000000ff ); }static struct platform_device *devkit8000_devices[]__initdata = {