Merge branches 'aaci', 'mmci-dma', 'pl' and 'pl011' into drivers
This commit is contained in:
@@ -30,6 +30,7 @@ obj-$(CONFIG_SYNCLINK_GT) += synclink_gt.o
|
||||
obj-$(CONFIG_AMIGA_BUILTIN_SERIAL) += amiserial.o
|
||||
obj-$(CONFIG_SX) += sx.o generic_serial.o
|
||||
obj-$(CONFIG_RIO) += rio/ generic_serial.o
|
||||
obj-$(CONFIG_VIRTIO_CONSOLE) += virtio_console.o
|
||||
obj-$(CONFIG_RAW_DRIVER) += raw.o
|
||||
obj-$(CONFIG_SGI_SNSC) += snsc.o snsc_event.o
|
||||
obj-$(CONFIG_MSPEC) += mspec.o
|
||||
|
||||
@@ -50,7 +50,7 @@ config AGP_ATI
|
||||
|
||||
config AGP_AMD
|
||||
tristate "AMD Irongate, 761, and 762 chipset support"
|
||||
depends on AGP && (X86_32 || ALPHA)
|
||||
depends on AGP && X86_32
|
||||
help
|
||||
This option gives you AGP support for the GLX component of
|
||||
X on AMD Irongate, 761, and 762 chipsets.
|
||||
|
||||
@@ -41,22 +41,8 @@ static int amd_create_page_map(struct amd_page_map *page_map)
|
||||
if (page_map->real == NULL)
|
||||
return -ENOMEM;
|
||||
|
||||
#ifndef CONFIG_X86
|
||||
SetPageReserved(virt_to_page(page_map->real));
|
||||
global_cache_flush();
|
||||
page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
|
||||
PAGE_SIZE);
|
||||
if (page_map->remapped == NULL) {
|
||||
ClearPageReserved(virt_to_page(page_map->real));
|
||||
free_page((unsigned long) page_map->real);
|
||||
page_map->real = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
global_cache_flush();
|
||||
#else
|
||||
set_memory_uc((unsigned long)page_map->real, 1);
|
||||
page_map->remapped = page_map->real;
|
||||
#endif
|
||||
|
||||
for (i = 0; i < PAGE_SIZE / sizeof(unsigned long); i++) {
|
||||
writel(agp_bridge->scratch_page, page_map->remapped+i);
|
||||
@@ -68,12 +54,7 @@ static int amd_create_page_map(struct amd_page_map *page_map)
|
||||
|
||||
static void amd_free_page_map(struct amd_page_map *page_map)
|
||||
{
|
||||
#ifndef CONFIG_X86
|
||||
iounmap(page_map->remapped);
|
||||
ClearPageReserved(virt_to_page(page_map->real));
|
||||
#else
|
||||
set_memory_wb((unsigned long)page_map->real, 1);
|
||||
#endif
|
||||
free_page((unsigned long) page_map->real);
|
||||
}
|
||||
|
||||
|
||||
@@ -773,18 +773,23 @@ int __init agp_amd64_init(void)
|
||||
#else
|
||||
printk(KERN_INFO PFX "You can boot with agp=try_unsupported\n");
|
||||
#endif
|
||||
pci_unregister_driver(&agp_amd64_pci_driver);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* First check that we have at least one AMD64 NB */
|
||||
if (!pci_dev_present(amd_nb_misc_ids))
|
||||
if (!pci_dev_present(amd_nb_misc_ids)) {
|
||||
pci_unregister_driver(&agp_amd64_pci_driver);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Look for any AGP bridge */
|
||||
agp_amd64_pci_driver.id_table = agp_amd64_pci_promisc_table;
|
||||
err = driver_attach(&agp_amd64_pci_driver.driver);
|
||||
if (err == 0 && agp_bridges_found == 0)
|
||||
if (err == 0 && agp_bridges_found == 0) {
|
||||
pci_unregister_driver(&agp_amd64_pci_driver);
|
||||
err = -ENODEV;
|
||||
}
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
@@ -773,21 +773,15 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
|
||||
|
||||
dev_info(&pdev->dev, "Intel %s Chipset\n", intel_agp_chipsets[i].name);
|
||||
|
||||
/*
|
||||
* If the device has not been properly setup, the following will catch
|
||||
* the problem and should stop the system from crashing.
|
||||
* 20030610 - hamish@zot.org
|
||||
*/
|
||||
if (pci_enable_device(pdev)) {
|
||||
dev_err(&pdev->dev, "can't enable PCI device\n");
|
||||
agp_put_bridge(bridge);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following fixes the case where the BIOS has "forgotten" to
|
||||
* provide an address range for the GART.
|
||||
* 20030610 - hamish@zot.org
|
||||
* This happens before pci_enable_device() intentionally;
|
||||
* calling pci_enable_device() before assigning the resource
|
||||
* will result in the GART being disabled on machines with such
|
||||
* BIOSs (the GART ends up with a BAR starting at 0, which
|
||||
* conflicts a lot of other devices).
|
||||
*/
|
||||
r = &pdev->resource[0];
|
||||
if (!r->start && r->end) {
|
||||
@@ -798,6 +792,17 @@ static int __devinit agp_intel_probe(struct pci_dev *pdev,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* If the device has not been properly setup, the following will catch
|
||||
* the problem and should stop the system from crashing.
|
||||
* 20030610 - hamish@zot.org
|
||||
*/
|
||||
if (pci_enable_device(pdev)) {
|
||||
dev_err(&pdev->dev, "can't enable PCI device\n");
|
||||
agp_put_bridge(bridge);
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
/* Fill in the mode register */
|
||||
if (cap_ptr) {
|
||||
pci_read_config_dword(pdev,
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
#define INTEL_GMCH_GMS_STOLEN_352M (0xd << 4)
|
||||
|
||||
#define I915_IFPADDR 0x60
|
||||
#define I830_HIC 0x70
|
||||
|
||||
/* Intel 965G registers */
|
||||
#define I965_MSAC 0x62
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/pagemap.h>
|
||||
#include <linux/agp_backend.h>
|
||||
#include <linux/delay.h>
|
||||
#include <asm/smp.h>
|
||||
#include "agp.h"
|
||||
#include "intel-agp.h"
|
||||
@@ -68,13 +69,10 @@ static struct _intel_private {
|
||||
phys_addr_t gma_bus_addr;
|
||||
u32 PGETBL_save;
|
||||
u32 __iomem *gtt; /* I915G */
|
||||
bool clear_fake_agp; /* on first access via agp, fill with scratch */
|
||||
int num_dcache_entries;
|
||||
union {
|
||||
void __iomem *i9xx_flush_page;
|
||||
void *i8xx_flush_page;
|
||||
};
|
||||
void __iomem *i9xx_flush_page;
|
||||
char *i81x_gtt_table;
|
||||
struct page *i8xx_page;
|
||||
struct resource ifp_resource;
|
||||
int resource_valid;
|
||||
struct page *scratch_page;
|
||||
@@ -721,28 +719,6 @@ static int intel_fake_agp_fetch_size(void)
|
||||
|
||||
static void i830_cleanup(void)
|
||||
{
|
||||
if (intel_private.i8xx_flush_page) {
|
||||
kunmap(intel_private.i8xx_flush_page);
|
||||
intel_private.i8xx_flush_page = NULL;
|
||||
}
|
||||
|
||||
__free_page(intel_private.i8xx_page);
|
||||
intel_private.i8xx_page = NULL;
|
||||
}
|
||||
|
||||
static void intel_i830_setup_flush(void)
|
||||
{
|
||||
/* return if we've already set the flush mechanism up */
|
||||
if (intel_private.i8xx_page)
|
||||
return;
|
||||
|
||||
intel_private.i8xx_page = alloc_page(GFP_KERNEL);
|
||||
if (!intel_private.i8xx_page)
|
||||
return;
|
||||
|
||||
intel_private.i8xx_flush_page = kmap(intel_private.i8xx_page);
|
||||
if (!intel_private.i8xx_flush_page)
|
||||
i830_cleanup();
|
||||
}
|
||||
|
||||
/* The chipset_flush interface needs to get data that has already been
|
||||
@@ -757,14 +733,27 @@ static void intel_i830_setup_flush(void)
|
||||
*/
|
||||
static void i830_chipset_flush(void)
|
||||
{
|
||||
unsigned int *pg = intel_private.i8xx_flush_page;
|
||||
unsigned long timeout = jiffies + msecs_to_jiffies(1000);
|
||||
|
||||
memset(pg, 0, 1024);
|
||||
/* Forcibly evict everything from the CPU write buffers.
|
||||
* clflush appears to be insufficient.
|
||||
*/
|
||||
wbinvd_on_all_cpus();
|
||||
|
||||
if (cpu_has_clflush)
|
||||
clflush_cache_range(pg, 1024);
|
||||
else if (wbinvd_on_all_cpus() != 0)
|
||||
printk(KERN_ERR "Timed out waiting for cache flush.\n");
|
||||
/* Now we've only seen documents for this magic bit on 855GM,
|
||||
* we hope it exists for the other gen2 chipsets...
|
||||
*
|
||||
* Also works as advertised on my 845G.
|
||||
*/
|
||||
writel(readl(intel_private.registers+I830_HIC) | (1<<31),
|
||||
intel_private.registers+I830_HIC);
|
||||
|
||||
while (readl(intel_private.registers+I830_HIC) & (1<<31)) {
|
||||
if (time_after(jiffies, timeout))
|
||||
break;
|
||||
|
||||
udelay(50);
|
||||
}
|
||||
}
|
||||
|
||||
static void i830_write_entry(dma_addr_t addr, unsigned int entry,
|
||||
@@ -848,8 +837,6 @@ static int i830_setup(void)
|
||||
|
||||
intel_private.gtt_bus_addr = reg_addr + I810_PTE_BASE;
|
||||
|
||||
intel_i830_setup_flush();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -869,21 +856,12 @@ static int intel_fake_agp_free_gatt_table(struct agp_bridge_data *bridge)
|
||||
|
||||
static int intel_fake_agp_configure(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!intel_enable_gtt())
|
||||
return -EIO;
|
||||
|
||||
intel_private.clear_fake_agp = true;
|
||||
agp_bridge->gart_bus_addr = intel_private.gma_bus_addr;
|
||||
|
||||
for (i = 0; i < intel_private.base.gtt_total_entries; i++) {
|
||||
intel_private.driver->write_entry(intel_private.scratch_page_dma,
|
||||
i, 0);
|
||||
}
|
||||
readl(intel_private.gtt+i-1); /* PCI Posting. */
|
||||
|
||||
global_cache_flush();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -945,6 +923,13 @@ static int intel_fake_agp_insert_entries(struct agp_memory *mem,
|
||||
{
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (intel_private.clear_fake_agp) {
|
||||
int start = intel_private.base.stolen_size / PAGE_SIZE;
|
||||
int end = intel_private.base.gtt_mappable_entries;
|
||||
intel_gtt_clear_range(start, end - start);
|
||||
intel_private.clear_fake_agp = false;
|
||||
}
|
||||
|
||||
if (INTEL_GTT_GEN == 1 && type == AGP_DCACHE_MEMORY)
|
||||
return i810_insert_dcache_entries(mem, pg_start, type);
|
||||
|
||||
|
||||
@@ -183,16 +183,16 @@ bfin_jc_circ_write(const unsigned char *buf, int count)
|
||||
}
|
||||
|
||||
#ifndef CONFIG_BFIN_JTAG_COMM_CONSOLE
|
||||
# define acquire_console_sem()
|
||||
# define release_console_sem()
|
||||
# define console_lock()
|
||||
# define console_unlock()
|
||||
#endif
|
||||
static int
|
||||
bfin_jc_write(struct tty_struct *tty, const unsigned char *buf, int count)
|
||||
{
|
||||
int i;
|
||||
acquire_console_sem();
|
||||
console_lock();
|
||||
i = bfin_jc_circ_write(buf, count);
|
||||
release_console_sem();
|
||||
console_unlock();
|
||||
wake_up_process(bfin_jc_kthread);
|
||||
return i;
|
||||
}
|
||||
|
||||
@@ -39,7 +39,7 @@ static struct hwrng nmk_rng = {
|
||||
.read = nmk_rng_read,
|
||||
};
|
||||
|
||||
static int nmk_rng_probe(struct amba_device *dev, struct amba_id *id)
|
||||
static int nmk_rng_probe(struct amba_device *dev, const struct amba_id *id)
|
||||
{
|
||||
void __iomem *base;
|
||||
int ret;
|
||||
|
||||
@@ -320,6 +320,7 @@ static int unload_when_empty = 1;
|
||||
static int add_smi(struct smi_info *smi);
|
||||
static int try_smi_init(struct smi_info *smi);
|
||||
static void cleanup_one_si(struct smi_info *to_clean);
|
||||
static void cleanup_ipmi_si(void);
|
||||
|
||||
static ATOMIC_NOTIFIER_HEAD(xaction_notifier_list);
|
||||
static int register_xaction_notifier(struct notifier_block *nb)
|
||||
@@ -3450,16 +3451,7 @@ static int __devinit init_ipmi_si(void)
|
||||
mutex_lock(&smi_infos_lock);
|
||||
if (unload_when_empty && list_empty(&smi_infos)) {
|
||||
mutex_unlock(&smi_infos_lock);
|
||||
#ifdef CONFIG_PCI
|
||||
if (pci_registered)
|
||||
pci_unregister_driver(&ipmi_pci_driver);
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_OF
|
||||
if (of_registered)
|
||||
of_unregister_platform_driver(&ipmi_of_platform_driver);
|
||||
#endif
|
||||
driver_unregister(&ipmi_driver.driver);
|
||||
cleanup_ipmi_si();
|
||||
printk(KERN_WARNING PFX
|
||||
"Unable to find any System Interface(s)\n");
|
||||
return -ENODEV;
|
||||
|
||||
@@ -830,8 +830,7 @@ static void monitor_card(unsigned long p)
|
||||
test_bit(IS_ANY_T1, &dev->flags))) {
|
||||
DEBUGP(4, dev, "Perform AUTOPPS\n");
|
||||
set_bit(IS_AUTOPPS_ACT, &dev->flags);
|
||||
ptsreq.protocol = ptsreq.protocol =
|
||||
(0x01 << dev->proto);
|
||||
ptsreq.protocol = (0x01 << dev->proto);
|
||||
ptsreq.flags = 0x01;
|
||||
ptsreq.pts1 = 0x00;
|
||||
ptsreq.pts2 = 0x00;
|
||||
|
||||
@@ -78,7 +78,6 @@ static void signalled_reboot_callback(void *callback_data)
|
||||
static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
|
||||
{
|
||||
struct ipw_dev *ipw = priv_data;
|
||||
struct resource *io_resource;
|
||||
int ret;
|
||||
|
||||
p_dev->resource[0]->flags &= ~IO_DATA_PATH_WIDTH;
|
||||
@@ -92,9 +91,12 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
io_resource = request_region(p_dev->resource[0]->start,
|
||||
resource_size(p_dev->resource[0]),
|
||||
IPWIRELESS_PCCARD_NAME);
|
||||
if (!request_region(p_dev->resource[0]->start,
|
||||
resource_size(p_dev->resource[0]),
|
||||
IPWIRELESS_PCCARD_NAME)) {
|
||||
ret = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
p_dev->resource[2]->flags |=
|
||||
WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_CM | WIN_ENABLE;
|
||||
@@ -105,22 +107,25 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
|
||||
|
||||
ret = pcmcia_map_mem_page(p_dev, p_dev->resource[2], p_dev->card_addr);
|
||||
if (ret != 0)
|
||||
goto exit2;
|
||||
goto exit1;
|
||||
|
||||
ipw->is_v2_card = resource_size(p_dev->resource[2]) == 0x100;
|
||||
|
||||
ipw->attr_memory = ioremap(p_dev->resource[2]->start,
|
||||
ipw->common_memory = ioremap(p_dev->resource[2]->start,
|
||||
resource_size(p_dev->resource[2]));
|
||||
request_mem_region(p_dev->resource[2]->start,
|
||||
resource_size(p_dev->resource[2]),
|
||||
IPWIRELESS_PCCARD_NAME);
|
||||
if (!request_mem_region(p_dev->resource[2]->start,
|
||||
resource_size(p_dev->resource[2]),
|
||||
IPWIRELESS_PCCARD_NAME)) {
|
||||
ret = -EBUSY;
|
||||
goto exit2;
|
||||
}
|
||||
|
||||
p_dev->resource[3]->flags |= WIN_DATA_WIDTH_16 | WIN_MEMORY_TYPE_AM |
|
||||
WIN_ENABLE;
|
||||
p_dev->resource[3]->end = 0; /* this used to be 0x1000 */
|
||||
ret = pcmcia_request_window(p_dev, p_dev->resource[3], 0);
|
||||
if (ret != 0)
|
||||
goto exit2;
|
||||
goto exit3;
|
||||
|
||||
ret = pcmcia_map_mem_page(p_dev, p_dev->resource[3], 0);
|
||||
if (ret != 0)
|
||||
@@ -128,23 +133,28 @@ static int ipwireless_probe(struct pcmcia_device *p_dev, void *priv_data)
|
||||
|
||||
ipw->attr_memory = ioremap(p_dev->resource[3]->start,
|
||||
resource_size(p_dev->resource[3]));
|
||||
request_mem_region(p_dev->resource[3]->start,
|
||||
resource_size(p_dev->resource[3]),
|
||||
IPWIRELESS_PCCARD_NAME);
|
||||
if (!request_mem_region(p_dev->resource[3]->start,
|
||||
resource_size(p_dev->resource[3]),
|
||||
IPWIRELESS_PCCARD_NAME)) {
|
||||
ret = -EBUSY;
|
||||
goto exit4;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
exit4:
|
||||
iounmap(ipw->attr_memory);
|
||||
exit3:
|
||||
release_mem_region(p_dev->resource[2]->start,
|
||||
resource_size(p_dev->resource[2]));
|
||||
exit2:
|
||||
if (ipw->common_memory) {
|
||||
release_mem_region(p_dev->resource[2]->start,
|
||||
resource_size(p_dev->resource[2]));
|
||||
iounmap(ipw->common_memory);
|
||||
}
|
||||
iounmap(ipw->common_memory);
|
||||
exit1:
|
||||
release_resource(io_resource);
|
||||
release_region(p_dev->resource[0]->start,
|
||||
resource_size(p_dev->resource[0]));
|
||||
exit:
|
||||
pcmcia_disable_device(p_dev);
|
||||
return -1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int config_ipwireless(struct ipw_dev *ipw)
|
||||
@@ -219,6 +229,8 @@ exit:
|
||||
|
||||
static void release_ipwireless(struct ipw_dev *ipw)
|
||||
{
|
||||
release_region(ipw->link->resource[0]->start,
|
||||
resource_size(ipw->link->resource[0]));
|
||||
if (ipw->common_memory) {
|
||||
release_mem_region(ipw->link->resource[2]->start,
|
||||
resource_size(ipw->link->resource[2]));
|
||||
|
||||
@@ -493,9 +493,6 @@ static int tpm_tis_init(struct device *dev, resource_size_t start,
|
||||
"1.2 TPM (device-id 0x%X, rev-id %d)\n",
|
||||
vendor >> 16, ioread8(chip->vendor.iobase + TPM_RID(0)));
|
||||
|
||||
if (is_itpm(to_pnp_dev(dev)))
|
||||
itpm = 1;
|
||||
|
||||
if (itpm)
|
||||
dev_info(dev, "Intel iTPM workaround enabled\n");
|
||||
|
||||
@@ -637,6 +634,9 @@ static int __devinit tpm_tis_pnp_init(struct pnp_dev *pnp_dev,
|
||||
else
|
||||
interrupts = 0;
|
||||
|
||||
if (is_itpm(pnp_dev))
|
||||
itpm = 1;
|
||||
|
||||
return tpm_tis_init(&pnp_dev->dev, start, len, irq);
|
||||
}
|
||||
|
||||
|
||||
1858
drivers/char/virtio_console.c
Normal file
1858
drivers/char/virtio_console.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user