chrp_pegasos_eth: Added Marvell Discovery II SRAM support
PATCH 1/1 chrp_pegasos_eth: Added Marvell Discovery II SRAM support
Added proper entry to support the Marvell MV64361 (Marvell Discovery II) SRAM.
This feature may be used by the mv643xx_eth driver.
arch/ppc/platforms/chrp_pegasos_eth.c +129 -6
@@ -17,6 +17,21 @@#include <linux/mv643xx.h> #include <linux/pci.h> +// Pegasos II location and size for the SRAM stuff +// Only used for the ethernet driver ATM +#define PEGASOS2_MARVELL_REGBASE (0xf1000000) +#define PEGASOS2_MARVELL_REGSIZE (0x00004000) +#define PEGASOS2_SRAM_BASE (0xf2000000) +#define PEGASOS2_SRAM_SIZE (0x00040000) + +#define PEGASOS2_SRAM_BASE_ETH0 (PEGASOS2_SRAM_BASE) +#define PEGASOS2_SRAM_BASE_ETH1 (PEGASOS2_SRAM_BASE_ETH0 + (PEGASOS2_SRAM_SIZE / 2) ) + +#define PEGASOS2_SRAM_RXRING_SIZE (PEGASOS2_SRAM_SIZE/4) +#define PEGASOS2_SRAM_TXRING_SIZE (PEGASOS2_SRAM_SIZE/4) + +#undef BE_VERBOSE +/* Pegasos 2 specific Marvell MV 64361 gigabit ethernet port setup */ static struct resource mv643xx_eth_shared_resources[] = { [0 ] = {
@@ -44,7 +59,15 @@ }, }; -static struct mv643xx_eth_platform_data eth0_pd; +static struct mv643xx_eth_platform_data eth0_pd = { + .tx_sram_addr =PEGASOS2_SRAM_BASE_ETH0 , + .tx_sram_size =PEGASOS2_SRAM_TXRING_SIZE , + .tx_queue_size =PEGASOS2_SRAM_TXRING_SIZE /16 , + + .rx_sram_addr =PEGASOS2_SRAM_BASE +PEGASOS2_SRAM_TXRING_SIZE , + .rx_sram_size =PEGASOS2_SRAM_RXRING_SIZE , + .rx_queue_size =PEGASOS2_SRAM_RXRING_SIZE /16 , +};static struct platform_device eth0_device = { .name =MV643XX_ETH_NAME ,
@@ -65,7 +88,15 @@ }, }; -static struct mv643xx_eth_platform_data eth1_pd; +static struct mv643xx_eth_platform_data eth1_pd = { + .tx_sram_addr =PEGASOS2_SRAM_BASE_ETH1 , + .tx_sram_size =PEGASOS2_SRAM_TXRING_SIZE , + .tx_queue_size =PEGASOS2_SRAM_TXRING_SIZE /16 , + + .rx_sram_addr =PEGASOS2_SRAM_BASE_ETH1 +PEGASOS2_SRAM_TXRING_SIZE , + .rx_sram_size =PEGASOS2_SRAM_RXRING_SIZE , + .rx_queue_size =PEGASOS2_SRAM_RXRING_SIZE /16 , +};static struct platform_device eth1_device = { .name =MV643XX_ETH_NAME ,
@@ -83,19 +114,111 @@ ð1_device, }; +/***********/ +/***********/ +#define MV_READ (offset,val) { val = readl(mv643xx_reg_base + offset); } +#define MV_WRITE (offset,data) writel(data, mv643xx_reg_base + offset) + +static void __iomem *mv643xx_reg_base =NULL ; -int -mv643xx_eth_add_pds (void ) + +static int Enable_SRAM (void ) +{ +u32 ALong; + +// Let's io remap the mv register to touch the SRAM config +if (mv643xx_reg_base ==NULL ) + mv643xx_reg_base =ioremap (PEGASOS2_MARVELL_REGBASE ,PEGASOS2_MARVELL_REGSIZE ); + +if (mv643xx_reg_base ==NULL ) +return -ENOMEM ; + +#ifdef BE_VERBOSE +printk ("Pegasos II/Marvell MV64361: register remapped from %p to %p\n" , (void *)PEGASOS2_MARVELL_REGBASE , (void *)mv643xx_reg_base); +#endif + +// First the SRAM config register +// We set it to 0 ATM -> No cache coherency, no parity check +MV_WRITE (MV64340_SRAM_CONFIG ,0 ); + +// set the SRAM address on the CPU side +MV_WRITE (MV64340_INTEGRATED_SRAM_BASE_ADDR ,PEGASOS2_SRAM_BASE >>16 ); + +// Now enable it (CPU side) +MV_READ (MV64340_BASE_ADDR_ENABLE , ALong); + ALong &= ~(1 <<19 ); +MV_WRITE (MV64340_BASE_ADDR_ENABLE , ALong); + +// And now to the GB side on WB 4 (0->3) can be use for DRAM stuff + ALong =0x02 ;// Integrated SRAM value + ALong |=PEGASOS2_SRAM_BASE &0xffff0000 ;// Finally set the SRAM adress in the uppter par of the register +MV_WRITE (MV643XX_ETH_BAR_4 , ALong); + +// and the size ... +MV_WRITE (MV643XX_ETH_SIZE_REG_4 ,PEGASOS2_SRAM_SIZE &0xffff0000 ); + +// Finaly enable the window +MV_READ (MV643XX_ETH_BASE_ADDR_ENABLE_REG , ALong); + ALong &= ~(1 <<4 ); +MV_WRITE (MV643XX_ETH_BASE_ADDR_ENABLE_REG , ALong); + +#ifdef BE_VERBOSE +printk ("Pegasos II/Marvell MV64361: register unmapped\n" ); +printk ("Pegasos II/Marvell MV64361: SRAM at %p, size=%x\n" , (void *)PEGASOS2_SRAM_BASE ,PEGASOS2_SRAM_SIZE ); +#endif + +iounmap (mv643xx_reg_base); + mv643xx_reg_base =NULL ; + +return 1 ; +} + + +/***********/ +/***********/ +int mv643xx_eth_add_pds (void ) {int ret =0 ; -static struct pci_device_id pci_marvell_mv64360[] = { +static struct pci_device_id pci_marvell_mv64360[] = + { {PCI_DEVICE (PCI_VENDOR_ID_MARVELL ,PCI_DEVICE_ID_MARVELL_MV64360 ) }, { } }; -if (pci_dev_present (pci_marvell_mv64360)) { +#ifdef BE_VERBOSE +printk ("Pegasos II/Marvell MV64361: init\n" ); +#endif + +if (pci_dev_present (pci_marvell_mv64360)) + { ret =platform_add_devices (mv643xx_eth_pd_devs,ARRAY_SIZE (mv643xx_eth_pd_devs)); + +if (Enable_SRAM () <0 ) + { +// Humm, disable SRAM stuff + eth0_pd.tx_sram_addr =0 ; + eth0_pd.tx_sram_size =0 ; + eth0_pd.rx_sram_addr =0 ; + eth0_pd.rx_sram_size =0 ; + + eth1_pd.tx_sram_addr =0 ; + eth1_pd.tx_sram_size =0 ; + eth1_pd.rx_sram_addr =0 ; + eth1_pd.rx_sram_size =0 ; + +#ifdef BE_VERBOSE +printk ("Pegasos II/Marvell MV64361: Can't enable the SRAM\n" ); +#endif + } } + +#ifdef BE_VERBOSE + +printk ("Pegasos II/Marvell MV64361: init is over\n" ); +#endif +return ret; } +device_initcall (mv643xx_eth_add_pds); +
Quoted 7 lines · Nicolas DET
Added proper entry to support the Marvell MV64361 (Marvell Discovery II) SRAM.
This feature may be used by the
mv643xx_ethdriver.Signed-off-by Nicolas DET <[email protected])
I hope the patch is ok now. I apologized for the text format issue.
By the way, I compiled and booted the 2.6.14-rc4. It feels a bit faster than rc3 (maybe it's just an impression). I'm also glad the Firewire supported has been improved since rc3.
Regards
Nicolas DET
Quoted 2 lines · In article <[email protected]> Nicolas DET wrote:
Added proper entry to support the Marvell MV64361 (Marvell Discovery II) SRAM.
Hi Nicolas,
I noticed a couple of style issues.
Quoted 1 line
+// Pegasos II location and size for the SRAM stuff
C++ style comments are discouraged in the kernel source.
arch/ppc/platforms/chrp_pegasos_eth.c line 193
Quoted 6 lines
arch/ppc/platforms/chrp_pegasos_eth.c +4
-1-static struct pci_device_id pci_marvell_mv64360[] = { + static struct pci_device_id pci_marvell_mv64360[] = + { + if (pci_dev_present(pci_marvell_mv64360)) + {
Open brace should not be on a line by itself except in function definitions.
-Dale Farnsworth
Quoted 8 lines · Dale Farnsworth
arch/ppc/platforms/chrp_pegasos_eth.c line 193
Quoted 6 lines
arch/ppc/platforms/chrp_pegasos_eth.c +4
-1-static struct pci_device_id pci_marvell_mv64360[] = { + static struct pci_device_id pci_marvell_mv64360[] = + { + if (pci_dev_present(pci_marvell_mv64360)) + {Open brace should not be on a line by itself except in function definitions.
Oh, neat, i knew i should not use same-line-braces for function but didn't know i should use them for non-functions :)
Friendly,
Sven Luther
Quoted 5 lines · Sven Luther
Quoted 4 lines · Dale Farnsworth
Quoted 3 lines
arch/ppc/platforms/chrp_pegasos_eth.c +2
-1-static struct pci_device_id pci_marvell_mv64360[] = { +static struct pci_device_id pci_marvell_mv64360[] = + {
Quoted 7 lines
Quoted 4 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ if (pci_dev_present(pci_marvell_mv64360)) + {Open brace should not be on a line by itself except in function definitions.
Oh, neat, i knew i should not use same-line-braces for function but didn't know i should use them for non-functions :)
???
I guess what I wrote wasn't clear, since in his most recent patch, Nicolas added more places like the above where the "{" has been moved to a line by itself. Just the opposite of what I meant to suggest.
Quoted 13 lines
From
Documentation/CodingStyle:
Chapter 3: Placing BracesThe other issue that always comes up in C styling is the placement of braces. Unlike the indent size, there are few technical reasons to choose one placement strategy over the other, but the preferred way, as shown to us by the prophets Kernighan and Ritchie, is to put the opening brace last on the line, and put the closing brace first, thusly:
if (x is true) { we do y }
Quoted 7 lines
However, there is one special case, namely functions: they have the opening brace at the beginning of the next line, thus:
int function(int x) { body of function }
-Dale