Here are the patches from lwbuss.
I think the previous patch in post#1 is enough.
They do the same things.
diff -Nru orig/linux-2.6.16.2/arch/nios2nommu/drivers/pci/altpci.c current/linux-2.6.16.2/arch/nios2nommu/drivers/pci/altpci.c
--- orig/linux-2.6.16.2/arch/nios2nommu/drivers/pci/altpci.c 2006-04-28 10:23:20.000000000 -0600
+++ current/linux-2.6.16.2/arch/nios2nommu/drivers/pci/altpci.c 2006-04-26 14:57:43.000000000 -0600
@@ -43,7 +43,7 @@# define ALT_PCI_IO_BASE (pciio)# define ALT_PCI_IO_SIZE 0x100000# define ALT_PCI_MEMORY_BASE (pcimm)
-#define ALT_PCI_MEM_SIZE 0x100000
+#define ALT_PCI_MEM_SIZE 0x200000
/*
* Functions for accessing PCI configuration space with type 1 accesses
diff -Nru orig/linux-2.6.16.2/arch/nios2nommu/mm/dma-noncoherent.c current/linux-2.6.16.2/arch/nios2nommu/mm/dma-noncoherent.c
--- orig/linux-2.6.16.2/arch/nios2nommu/mm/dma-noncoherent.c 2006-04-28 10:23:20.000000000 -0600
+++ current/linux-2.6.16.2/arch/nios2nommu/mm/dma-noncoherent.c 2006-04-28 10:22:11.000000000 -0600
@@ -140,7 +140,9 @@
addr = (unsigned long) page_address(sg->page);
if (addr) {
__dma_sync(addr + sg->offset, sg->length, direction);
- sg->dma_address = (dma_addr_t)page_to_phys(sg->page)
+ //sg->dma_address = (dma_addr_t)page_to_phys(sg->page)
+ // + sg->offset;
+ sg->dma_address = (dma_addr_t)page_address(sg->page)
+ sg->offset;
}
}
@@ -160,7 +162,13 @@
addr = (unsigned long) page_address(page) + offset;
dma_cache_wback_inv(addr, size);
- return page_to_phys(page) + offset;
+ printk("page= 0x%08x\taddr=0x%08lx\tmap_page=0x%08x\n",
+ page,
+ addr,
+ page_to_phys(page) + offset);
+
+// return page_to_phys(page) + offset;
+ return (dma_addr_t)addr;
}
EXPORT_SYMBOL(dma_map_page);
diff -Nru orig/linux-2.6.16.2/drivers/i2c/algos/i2c-algo-oc.c current/linux-2.6.16.2/drivers/i2c/algos/i2c-algo-oc.c
--- orig/linux-2.6.16.2/drivers/i2c/algos/i2c-algo-oc.c 2006-04-28 10:23:20.000000000 -0600
+++ current/linux-2.6.16.2/drivers/i2c/algos/i2c-algo-oc.c 2006-04-25 14:40:14.000000000 -0600
@@ -371,8 +371,8 @@
/* -----exported algorithm data: ------------------------------------- */
static struct i2c_algorithm oc_algo = {
- .name = "Opencores algorithm",
- .id = I2C_ALGO_OC,
+// .name = "Opencores algorithm",
+// .id = I2C_ALGO_OC,
.master_xfer = oc_xfer,
.functionality = oc_func,
};
@@ -382,13 +382,13 @@
*/
int i2c_oc_add_bus(struct i2c_adapter *adap)
{
- struct i2c_algo_oc_data *oc_adap = adap->algo_data;
+ //struct i2c_algo_oc_data *oc_adap = adap->algo_data;
DEB2(dev_dbg(&adap->dev, "hw routines registered.\n")wink.gif
/* register new adapter to i2c module... */
- adap->id |= oc_algo.id;
+ //adap->id |= oc_algo.id;
adap->algo = &oc_algo;
adap->timeout = 100; /* default values, should */
diff -Nru orig/linux-2.6.16.2/drivers/i2c/busses/i2c-oc.c current/linux-2.6.16.2/drivers/i2c/busses/i2c-oc.c
--- orig/linux-2.6.16.2/drivers/i2c/busses/i2c-oc.c 2006-04-28 10:23:20.000000000 -0600
+++ current/linux-2.6.16.2/drivers/i2c/busses/i2c-oc.c 2006-04-25 14:44:45.000000000 -0600
@@ -46,16 +46,20 @@
static int base0 = 0;
static int irq0 = 0;
static int clock0 = 0;
+#ifdef na_i2c_1
static int base1 = 0;
static int irq1 = 0;
static int clock1 = 0;
+#endif
module_param(base0, int, 0);
module_param(irq0, int, 0);
module_param(clock0, int, 0);
+#ifdef na_i2c_1
module_param(base1, int, 0);
module_param(irq1, int, 0);
module_param(clock1, int, 0);
+#endif
static void oci2c_setreg (struct iic_oc_hw *hw, int regno, int val)
{
@@ -166,11 +170,13 @@
.clock = nasys_clock_freq_1000,
};
+#ifdef na_i2c_1
static struct iic_oc_hw oc_hw_1 = {
.base = na_i2c_1,
.irq = na_i2c_1_irq,
.clock = nasys_clock_freq_1000,
};
+#endif
static struct i2c_algo_oc_data oc_data_0 = {
.hw = &oc_hw_0,
@@ -182,6 +188,7 @@
.timeout = 100,
};
+#ifdef na_i2c_1
static struct i2c_algo_oc_data oc_data_1 = {
.hw = &oc_hw_1,
.setreg = oci2c_setreg,
@@ -191,6 +198,7 @@
.mdelay = 10,
.timeout = 100,
};
+#endif
static struct i2c_adapter oc_ops_0 = {
.owner = THIS_MODULE,
@@ -199,12 +207,14 @@
.name = "Opencores i2c 0",
};
+#ifdef na_i2c_1
static struct i2c_adapter oc_ops_1 = {
.owner = THIS_MODULE,
.id = I2C_HW_OC_UKIT,
.algo_data = &oc_data_1,
.name = "Opencores i2c 1",
};
+#endif
static int __init i2c_oc_init(void)
{
@@ -218,16 +228,7 @@
if (clock0)
oc_hw_0.clock = clock0;
- if (base1)
- oc_hw_1.base = base1;
- if (irq1)
- oc_hw_1.irq = irq1;
- if (clock1)
- oc_hw_1.clock = clock1;
-
-
init_waitqueue_head(&oc_hw_0.wait);
- init_waitqueue_head(&oc_hw_1.wait);
if (oc_hw_init(&oc_hw_0)==0) {
if (i2c_oc_add_bus(&oc_ops_0) < 0) {
@@ -235,11 +236,22 @@
}
}
+#ifdef na_i2c_1
+ if (base1)
+ oc_hw_1.base = base1;
+ if (irq1)
+ oc_hw_1.irq = irq1;
+ if (clock1)
+ oc_hw_1.clock = clock1;
+
+ init_waitqueue_head(&oc_hw_1.wait);
+
if (oc_hw_init(&oc_hw_1)==0) {
if (i2c_oc_add_bus(&oc_ops_1) < 0) {
oc_hw_exit(&oc_hw_1);
}
}
+#endif
return 0;
}
@@ -248,8 +260,10 @@
{
i2c_oc_del_bus(&oc_ops_0);
oc_hw_exit(&oc_hw_0);
+#ifdef na_i2c_1
i2c_oc_del_bus(&oc_ops_1);
oc_hw_exit(&oc_hw_1);
+#endif
}
module_init(i2c_oc_init);