Tokyo Electron SDIO controller (Ellen) support
PATCH 1/1 Tokyo Electron SDIO controller (Ellen) support
Kernel "pci_ids.h" file has data for that card missing.
Also, Ellen needs some control bits flipped before it functions properly as SDIO controller by the spec. Should apply clenly to Linus and Drzeus trees. Please apply.
drivers/mmc/host/sdhci.c +71 -4
@@ -97,6 +99,13 @@ SDHCI_QUIRK_RESET_CMD_DATA_ON_IOS, }, + { + .vendor = PCI_VENDOR_ID_TOKYO_ELECTRON, + .device = PCI_DEVICE_ID_ELLEN, + .subvendor = PCI_ANY_ID, + .subdevice =PCI_ANY_ID , + }, + { /* Generic SD host controller */PCI_DEVICE_CLASS ((PCI_CLASS_SYSTEM_SDHCI <<8 ),0xFFFF00 ) },
@@ -1205,10 +1214,43 @@* * \*****************************************************************************/ +static int __devinit sdhci_ellen_init (struct pci_dev *pdev) +{ +int ret; +unsigned int config; +void __iomem * ioaddr; + +if (pci_resource_flags (pdev,0 ) &PCI_BASE_ADDRESS_SPACE ) +return -ENOMEM ; + + ret =pci_request_region (pdev,0 ,"EllenPCI" ); +if (ret) +return -ENOMEM ; + + ioaddr =ioremap_nocache (pci_resource_start (pdev,0 ), +pci_resource_len (pdev,0 )); +if (!ioaddr) { + ret = -ENOMEM ; + goto release; + } + +/* Do some magic passes to enable Ellen PCI interrupts */ + config =readw (ioaddr +0x4c ); + config |= (1 ) | (1 <<3 ) | (1 <<6 ); +writew (config, ioaddr +0x4c ); +/* Retire last write by read */ + config =readw (ioaddr +0x4c ); + +iounmap (ioaddr); +release: +pci_release_region (pdev,0 ); +return ret; +} +static int __devinit sdhci_probe_slot (struct pci_dev *pdev,int slot) {int ret; -unsigned int version; +unsigned int version, temp, iomemsize;struct sdhci_chip *chip;struct mmc_host *mmc;struct sdhci_host *host;
@@ -1225,6 +1267,15 @@ first_bar &=PCI_SLOT_INFO_FIRST_BAR_MASK ; +if ((pdev->vendor ==PCI_VENDOR_ID_TOKYO_ELECTRON ) && + (pdev->device ==PCI_DEVICE_ID_ELLEN )) { + first_bar =2 ; + iomemsize =0x400 ; + } +else { + iomemsize =0x100 ; + } +if (first_bar >5 ) { printk(KERN_ERR DRIVER_NAME ": Invalid first BAR. Aborting.\n");return -ENODEV ;
@@ -1235,9 +1286,9 @@return -ENODEV ; } -if (pci_resource_len (pdev, first_bar + slot) !=0x100 ) { - printk(KERN_ERR DRIVER_NAME ": Invalid iomem size. " - "You may experience problems.\n"); +if ((temp =pci_resource_len (pdev, first_bar + slot)) != iomemsize) { + printk(KERN_ERR DRIVER_NAME ": Invalid iomem size %x. " + "You may experience problems.\n", temp); }if ((pdev->class &0x0000FF ) ==PCI_SDHCI_IFVENDOR ) {
@@ -1526,6 +1577,24 @@ chip->pdev = pdev; chip->quirks = ent->driver_data; +if ((pdev->vendor ==PCI_VENDOR_ID_TOKYO_ELECTRON ) && + (pdev->device ==PCI_DEVICE_ID_ELLEN )) { + ret =pci_read_config_byte (pdev,PCI_CLASS_PROG , &rev); +if (ret) + goto free; + +if ( rev &0x1 ) { +/* Ellen indicates DMA support by this bit */ + chip->quirks |=SDHCI_QUIRK_FORCE_DMA ; + } + + ret =sdhci_ellen_init (pdev); +if (ret) { + ret = -ENODEV ; + goto free; + } + } +if (debug_quirks) chip->quirks = debug_quirks;
include/linux/pci_ids.h +3 -0
@@ -2057,6 +2057,9 @@#define PCI_DEVICE_ID_BCM1250_PCI 0x0001#define PCI_DEVICE_ID_BCM1250_HT 0x0002 +#define PCI_VENDOR_ID_TOKYO_ELECTRON 0x1679 +#define PCI_DEVICE_ID_ELLEN 0x3000 +#define PCI_VENDOR_ID_ATHEROS 0x168c#define PCI_VENDOR_ID_NETCELL 0x169c
Quoted 9 lines · On Sat, 01 Dec 2007 00:27:06 -0800 Vitaly Luban <[email protected]> wrote:
Kernel "
pci_ids.h" file has data for that card missing.Also, Ellen needs some control bits flipped before it functions properly as SDIO controller by the spec.
Should apply clenly to Linus and Drzeus trees. Please apply.Signed-off-by Vitaly Luban <[email protected]>
The illiteracy rates for hardware engineers must be through the roof. Nobody seems capable of reading specifications anymore...
As for the patch, it's a big NAK at this point. Vendors who can't be bothered to follow the standard will have to wait for Ben's separation patches before they can be supported. Then they can have some voodoo front-end to handle their mistakes instead of turning sdhci.c into a collection of hacks and workarounds.
Rgds
Pierre
Quoted 4 lines · Pierre Ossman
As for the patch, it's a big NAK at this point. Vendors who can't be bothered to follow the standard will have to wait for Ben's separation patches before they can be supported. Then they can have some voodoo front-end to handle their mistakes instead of turning
sdhci.cinto a collection of hacks and workarounds.
What's the status of Ben's separation patches? I haven't seen a posting of those versus a recent kernel. I've got some SDHCI driver glue for the non-pci Arasan core running in an older kernel tree with those patches. It's just waiting for the separation patches to hit the mmc or mainline tree.
-Matt
Quoted 10 lines · Matt Porter
Quoted 4 lines · Pierre Ossman
As for the patch, it's a big NAK at this point. Vendors who can't be bothered to follow the standard will have to wait for Ben's separation patches before they can be supported. Then they can have some voodoo front-end to handle their mistakes instead of turning
sdhci.cinto a collection of hacks and workarounds.What's the status of Ben's separation patches? I haven't seen a posting of those versus a recent kernel. I've got some SDHCI driver glue for the non-pci Arasan core running in an older kernel tree with those patches. It's just waiting for the separation patches to hit the mmc or mainline tree.
I need to go back and try and sort out the last of Pierre's last comments, and update to the latest kernel version. I was waiting for 2.6.24-rc4 to re-start the effort to try and ensure there are fewer changes due to fixes.
Signature · 3 lines
Ben ([email protected], http://www.fluff.org/) 'a smiley only costs 4 bytes'
Quoted 7 lines · On Mon, 3 Dec 2007 14:39:26 +0000 Ben Dooks <[email protected]> wrote:
Quoted 5 lines · Matt Porter
What's the status of Ben's separation patches? I haven't seen a posting of those versus a recent kernel. I've got some SDHCI driver glue for the non-pci Arasan core running in an older kernel tree with those patches. It's just waiting for the separation patches to hit the mmc or mainline tree.
Quoted 5 lines
I need to go back and try and sort out the last of Pierre's last comments, and update to the latest kernel version. I was waiting for 2.6.24-rc4 to re-start the effort to try and ensure there are fewer changes due to fixes.
Any progress on this little project?
Rgds
Pierre
Quoted 9 lines · On Sat, 01 Dec 2007 00:27:06 -0800 Vitaly Luban <[email protected]> wrote:
Kernel "
pci_ids.h" file has data for that card missing.Also, Ellen needs some control bits flipped before it functions properly as SDIO controller by the spec.
Should apply clenly to Linus and Drzeus trees. Please apply.Signed-off-by Vitaly Luban <[email protected]>
The separation has now finally been performed in case you want to revisit this patch.
Rgds
Signature · 6 lines
-- Pierre Ossman WARNING: This correspondence is being monitored by the Swedish government. Make sure your server uses encryption for SMTP traffic and consider using PGP for end-to-end encryption.