diff --git a/debian/changelog b/debian/changelog index d07d88037..362cca324 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,13 +1,19 @@ -linux-2.6 (2.6.29-1~experimental.2) UNRELEASED; urgency=low +linux-2.6 (2.6.30~rc1-1~experimental.1) UNRELEASED; urgency=low * New upstream release - radeonfb: suspend/resume for ATI Mobility Radeon RV350. (closes: #506964) + [ maximilian attems ] * [sparc] Enable BLK_DEV_CRYPTOLOOP. (closes: #521829) * Enable PATA_JMICRON instead of legacy BLK_DEV_JMICRON. (closes: #431500, #458493) + [ Ben Hutchings ] + * Remove firmware from driver/staging (closes: #521553) + - Disable affected drivers: rt2860, rt2870 + + -- maximilian attems Mon, 30 Mar 2009 14:40:26 +0200 linux-2.6 (2.6.29-2) unstable; urgency=low diff --git a/debian/config/config b/debian/config/config index 62936ef5c..c80a83467 100644 --- a/debian/config/config +++ b/debian/config/config @@ -1911,12 +1911,12 @@ CONFIG_ET131X=m ## ## file: drivers/staging/rt2860/Kconfig ## -CONFIG_RT2860=m +# CONFIG_RT2860 is not set ## ## file: drivers/staging/rt2870/Kconfig ## -CONFIG_RT2870=m +# CONFIG_RT2870 is not set ## ## file: drivers/staging/rtl8187se/Kconfig diff --git a/debian/patches/debian/dfsg/drivers-net-bnx2-request_firmware-1.patch b/debian/patches/debian/dfsg/drivers-net-bnx2-request_firmware-1.patch deleted file mode 100644 index b19069956..000000000 --- a/debian/patches/debian/dfsg/drivers-net-bnx2-request_firmware-1.patch +++ /dev/null @@ -1,602 +0,0 @@ -diff --git a/drivers/net/bnx2.c b/drivers/net/bnx2.c -index 5ebde67..5401dab 100644 ---- a/drivers/net/bnx2.c -+++ b/drivers/net/bnx2.c -@@ -46,12 +46,12 @@ - #include - #include - #include --#include -+#include - #include - - #include "bnx2.h" --#include "bnx2_fw.h" --#include "bnx2_fw2.h" -+#include "bnx2_cpu.h" -+#include "bnx2_fw_file.h" - - #define FW_BUF_SIZE 0x10000 - -@@ -59,12 +59,20 @@ - #define PFX DRV_MODULE_NAME ": " - #define DRV_MODULE_VERSION "1.9.3" - #define DRV_MODULE_RELDATE "March 17, 2009" -+#define FW_FILE_06 "bnx2-06-4.6.16.fw" -+#define FW_FILE_09 "bnx2-09-4.6.15.fw" - - #define RUN_AT(x) (jiffies + (x)) - - /* Time in jiffies before concluding the transmitter is hung. */ - #define TX_TIMEOUT (5*HZ) - -+#ifdef DEBUG -+# define DPRINTK(fmt, args...) printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args) -+#else -+# define DPRINTK(fmt, args...) -+#endif -+ - static char version[] __devinitdata = - "Broadcom NetXtreme II Gigabit Ethernet Driver " DRV_MODULE_NAME " v" DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; - -@@ -72,6 +80,8 @@ MODULE_AUTHOR("Michael Chan "); - MODULE_DESCRIPTION("Broadcom NetXtreme II BCM5706/5708/5709/5716 Driver"); - MODULE_LICENSE("GPL"); - MODULE_VERSION(DRV_MODULE_VERSION); -+MODULE_FIRMWARE(FW_FILE_06); -+MODULE_FIRMWARE(FW_FILE_09); - - static int disable_msi = 0; - -@@ -3315,32 +3325,32 @@ bnx2_set_rx_mode(struct net_device *dev) - spin_unlock_bh(&bp->phy_lock); - } - --static void --load_rv2p_fw(struct bnx2 *bp, __le32 *rv2p_code, u32 rv2p_code_len, -- u32 rv2p_proc) -+static int -+load_rv2p_fw(struct bnx2 *bp, u32 rv2p_proc, const struct bnx2_fw_file_section *fw_section) - { -- int i; -+ int i, len, offset; -+ u32 *data; - u32 val; - -- if (rv2p_proc == RV2P_PROC2 && CHIP_NUM(bp) == CHIP_NUM_5709) { -- val = le32_to_cpu(rv2p_code[XI_RV2P_PROC2_MAX_BD_PAGE_LOC]); -- val &= ~XI_RV2P_PROC2_BD_PAGE_SIZE_MSK; -- val |= XI_RV2P_PROC2_BD_PAGE_SIZE; -- rv2p_code[XI_RV2P_PROC2_MAX_BD_PAGE_LOC] = cpu_to_le32(val); -- } -+ len = be32_to_cpu(fw_section->len); -+ offset = be32_to_cpu(fw_section->offset); -+ -+ if (!len || !offset || len + offset > bp->firmware->size) -+ return -EINVAL; -+ DPRINTK("load rv2p firmware with length %u from file offset %u\n", len, offset); - -- for (i = 0; i < rv2p_code_len; i += 8) { -- REG_WR(bp, BNX2_RV2P_INSTR_HIGH, le32_to_cpu(*rv2p_code)); -- rv2p_code++; -- REG_WR(bp, BNX2_RV2P_INSTR_LOW, le32_to_cpu(*rv2p_code)); -- rv2p_code++; -+ data = (u32 *)(bp->firmware->data + offset); -+ -+ for (i = 0; i < (len / 4); i += 2) { -+ REG_WR(bp, BNX2_RV2P_INSTR_HIGH, be32_to_cpu(data[i])); -+ REG_WR(bp, BNX2_RV2P_INSTR_LOW, be32_to_cpu(data[i+1])); - - if (rv2p_proc == RV2P_PROC1) { -- val = (i / 8) | BNX2_RV2P_PROC1_ADDR_CMD_RDWR; -+ val = (i / 2) | BNX2_RV2P_PROC1_ADDR_CMD_RDWR; - REG_WR(bp, BNX2_RV2P_PROC1_ADDR_CMD, val); - } - else { -- val = (i / 8) | BNX2_RV2P_PROC2_ADDR_CMD_RDWR; -+ val = (i / 2) | BNX2_RV2P_PROC2_ADDR_CMD_RDWR; - REG_WR(bp, BNX2_RV2P_PROC2_ADDR_CMD, val); - } - } -@@ -3352,14 +3362,18 @@ load_rv2p_fw(struct bnx2 *bp, __le32 *rv2p_code, u32 rv2p_code_len, - else { - REG_WR(bp, BNX2_RV2P_COMMAND, BNX2_RV2P_COMMAND_PROC2_RESET); - } -+ -+ return 0; - } - - static int --load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw) -+load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, -+ const struct bnx2_fw_file_entry *fw_entry) - { -+ u32 addr, len, file_offset; - u32 offset; - u32 val; -- int rc; -+ u32 *data; - - /* Halt the CPU. */ - val = bnx2_reg_rd_ind(bp, cpu_reg->mode); -@@ -3368,64 +3382,87 @@ load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw) - bnx2_reg_wr_ind(bp, cpu_reg->state, cpu_reg->state_value_clear); - - /* Load the Text area. */ -- offset = cpu_reg->spad_base + (fw->text_addr - cpu_reg->mips_view_base); -- if (fw->gz_text) { -+ addr = be32_to_cpu(fw_entry->text.addr); -+ len = be32_to_cpu(fw_entry->text.len); -+ file_offset = be32_to_cpu(fw_entry->text.offset); -+ data = (u32 *)(bp->firmware->data + file_offset); -+ DPRINTK("load text section to %x with length %u from file offset %x\n", addr, len, file_offset); -+ -+ offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base); -+ if (len) { - int j; - -- rc = zlib_inflate_blob(fw->text, FW_BUF_SIZE, fw->gz_text, -- fw->gz_text_len); -- if (rc < 0) -- return rc; -- -- for (j = 0; j < (fw->text_len / 4); j++, offset += 4) { -- bnx2_reg_wr_ind(bp, offset, le32_to_cpu(fw->text[j])); -+ for (j = 0; j < (len / 4); j++, offset += 4) { -+ bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j])); - } - } - - /* Load the Data area. */ -- offset = cpu_reg->spad_base + (fw->data_addr - cpu_reg->mips_view_base); -- if (fw->data) { -+ addr = be32_to_cpu(fw_entry->data.addr); -+ len = be32_to_cpu(fw_entry->data.len); -+ file_offset = be32_to_cpu(fw_entry->data.offset); -+ data = (u32 *)(bp->firmware->data + file_offset); -+ DPRINTK("load data section to %x with length %u from file offset %x\n", addr, len, file_offset); -+ -+ offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base); -+ if (len) { - int j; - -- for (j = 0; j < (fw->data_len / 4); j++, offset += 4) { -- bnx2_reg_wr_ind(bp, offset, fw->data[j]); -+ for (j = 0; j < (len / 4); j++, offset += 4) { -+ bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j])); - } - } - - /* Load the SBSS area. */ -- offset = cpu_reg->spad_base + (fw->sbss_addr - cpu_reg->mips_view_base); -- if (fw->sbss_len) { -+ addr = be32_to_cpu(fw_entry->sbss.addr); -+ len = be32_to_cpu(fw_entry->sbss.len); -+ DPRINTK("init sbss section on %x with length %u\n", addr, len); -+ -+ offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base); -+ if (len) { - int j; - -- for (j = 0; j < (fw->sbss_len / 4); j++, offset += 4) { -+ for (j = 0; j < (len / 4); j++, offset += 4) { - bnx2_reg_wr_ind(bp, offset, 0); - } - } - - /* Load the BSS area. */ -- offset = cpu_reg->spad_base + (fw->bss_addr - cpu_reg->mips_view_base); -- if (fw->bss_len) { -+ addr = be32_to_cpu(fw_entry->bss.addr); -+ len = be32_to_cpu(fw_entry->bss.len); -+ DPRINTK("init bss section on %x with length %u\n", addr, len); -+ -+ offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base); -+ if (len) { - int j; - -- for (j = 0; j < (fw->bss_len/4); j++, offset += 4) { -+ for (j = 0; j < (len / 4); j++, offset += 4) { - bnx2_reg_wr_ind(bp, offset, 0); - } - } - - /* Load the Read-Only area. */ -- offset = cpu_reg->spad_base + -- (fw->rodata_addr - cpu_reg->mips_view_base); -- if (fw->rodata) { -+ addr = be32_to_cpu(fw_entry->rodata.addr); -+ len = be32_to_cpu(fw_entry->rodata.len); -+ file_offset = be32_to_cpu(fw_entry->rodata.offset); -+ data = (u32 *)(bp->firmware->data + file_offset); -+ DPRINTK("load rodata section to %x with length %u from file offset %x\n", addr, len, file_offset); -+ -+ offset = cpu_reg->spad_base + (addr - cpu_reg->mips_view_base); -+ if (len) { - int j; - -- for (j = 0; j < (fw->rodata_len / 4); j++, offset += 4) { -- bnx2_reg_wr_ind(bp, offset, fw->rodata[j]); -+ for (j = 0; j < (len / 4); j++, offset += 4) { -+ bnx2_reg_wr_ind(bp, offset, be32_to_cpu(data[j])); - } - } - - /* Clear the pre-fetch instruction. */ - bnx2_reg_wr_ind(bp, cpu_reg->inst, 0); -- bnx2_reg_wr_ind(bp, cpu_reg->pc, fw->start_addr); -+ -+ val = be32_to_cpu(fw_entry->start_addr); -+ DPRINTK("starting cpu on %x\n", val); -+ bnx2_reg_wr_ind(bp, cpu_reg->pc, val); - - /* Start the CPU. */ - val = bnx2_reg_rd_ind(bp, cpu_reg->mode); -@@ -3439,95 +3476,39 @@ load_cpu_fw(struct bnx2 *bp, const struct cpu_reg *cpu_reg, struct fw_info *fw) - static int - bnx2_init_cpus(struct bnx2 *bp) - { -- struct fw_info *fw; -- int rc, rv2p_len; -- void *text, *rv2p; -- -- /* Initialize the RV2P processor. */ -- text = vmalloc(FW_BUF_SIZE); -- if (!text) -- return -ENOMEM; -- if (CHIP_NUM(bp) == CHIP_NUM_5709) { -- rv2p = bnx2_xi_rv2p_proc1; -- rv2p_len = sizeof(bnx2_xi_rv2p_proc1); -- } else { -- rv2p = bnx2_rv2p_proc1; -- rv2p_len = sizeof(bnx2_rv2p_proc1); -- } -- rc = zlib_inflate_blob(text, FW_BUF_SIZE, rv2p, rv2p_len); -- if (rc < 0) -- goto init_cpu_err; -- -- load_rv2p_fw(bp, text, rc /* == len */, RV2P_PROC1); -+ const struct bnx2_fw_file *fw = NULL; -+ int rc; - -- if (CHIP_NUM(bp) == CHIP_NUM_5709) { -- rv2p = bnx2_xi_rv2p_proc2; -- rv2p_len = sizeof(bnx2_xi_rv2p_proc2); -- } else { -- rv2p = bnx2_rv2p_proc2; -- rv2p_len = sizeof(bnx2_rv2p_proc2); -- } -- rc = zlib_inflate_blob(text, FW_BUF_SIZE, rv2p, rv2p_len); -- if (rc < 0) -- goto init_cpu_err; -+ fw = (struct bnx2_fw_file *)bp->firmware->data; - -- load_rv2p_fw(bp, text, rc /* == len */, RV2P_PROC2); -+ /* Initialize the RV2P processor. */ -+ load_rv2p_fw(bp, RV2P_PROC1, &fw->rv2p_proc1); -+ load_rv2p_fw(bp, RV2P_PROC2, &fw->rv2p_proc2); - - /* Initialize the RX Processor. */ -- if (CHIP_NUM(bp) == CHIP_NUM_5709) -- fw = &bnx2_rxp_fw_09; -- else -- fw = &bnx2_rxp_fw_06; -- -- fw->text = text; -- rc = load_cpu_fw(bp, &cpu_reg_rxp, fw); -+ rc = load_cpu_fw(bp, &cpu_reg_rxp, &fw->rxp); - if (rc) - goto init_cpu_err; - - /* Initialize the TX Processor. */ -- if (CHIP_NUM(bp) == CHIP_NUM_5709) -- fw = &bnx2_txp_fw_09; -- else -- fw = &bnx2_txp_fw_06; -- -- fw->text = text; -- rc = load_cpu_fw(bp, &cpu_reg_txp, fw); -+ rc = load_cpu_fw(bp, &cpu_reg_txp, &fw->txp); - if (rc) - goto init_cpu_err; - - /* Initialize the TX Patch-up Processor. */ -- if (CHIP_NUM(bp) == CHIP_NUM_5709) -- fw = &bnx2_tpat_fw_09; -- else -- fw = &bnx2_tpat_fw_06; -- -- fw->text = text; -- rc = load_cpu_fw(bp, &cpu_reg_tpat, fw); -+ rc = load_cpu_fw(bp, &cpu_reg_tpat, &fw->tpat); - if (rc) - goto init_cpu_err; - - /* Initialize the Completion Processor. */ -- if (CHIP_NUM(bp) == CHIP_NUM_5709) -- fw = &bnx2_com_fw_09; -- else -- fw = &bnx2_com_fw_06; -- -- fw->text = text; -- rc = load_cpu_fw(bp, &cpu_reg_com, fw); -+ rc = load_cpu_fw(bp, &cpu_reg_com, &fw->com); - if (rc) - goto init_cpu_err; - - /* Initialize the Command Processor. */ -- if (CHIP_NUM(bp) == CHIP_NUM_5709) -- fw = &bnx2_cp_fw_09; -- else -- fw = &bnx2_cp_fw_06; -- -- fw->text = text; -- rc = load_cpu_fw(bp, &cpu_reg_cp, fw); -+ rc = load_cpu_fw(bp, &cpu_reg_cp, &fw->cp); - - init_cpu_err: -- vfree(text); - return rc; - } - -@@ -7656,6 +7638,7 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) - struct bnx2 *bp; - int rc; - char str[40]; -+ const char *fw_file; - - if (version_printed++ == 0) - printk(KERN_INFO "%s", version); -@@ -7697,6 +7680,23 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) - - pci_set_drvdata(pdev, dev); - -+ if (CHIP_NUM(bp) == CHIP_NUM_5709) -+ fw_file = FW_FILE_09; -+ else -+ fw_file = FW_FILE_06; -+ -+ rc = request_firmware(&bp->firmware, fw_file, &pdev->dev); -+ if (rc) { -+ printk(KERN_ERR PFX "Can't load firmware file %s\n", fw_file); -+ goto error; -+ } -+ -+ if (bp->firmware->size < sizeof(struct bnx2_fw_file)) { -+ printk(KERN_ERR PFX "Firmware file too small\n"); -+ rc = -EINVAL; -+ goto error; -+ } -+ - memcpy(dev->dev_addr, bp->mac_addr, 6); - memcpy(dev->perm_addr, bp->mac_addr, 6); - -@@ -7714,13 +7714,7 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) - - if ((rc = register_netdev(dev))) { - dev_err(&pdev->dev, "Cannot register net device\n"); -- if (bp->regview) -- iounmap(bp->regview); -- pci_release_regions(pdev); -- pci_disable_device(pdev); -- pci_set_drvdata(pdev, NULL); -- free_netdev(dev); -- return rc; -+ goto error; - } - - printk(KERN_INFO "%s: %s (%c%d) %s found at mem %lx, " -@@ -7734,6 +7728,15 @@ bnx2_init_one(struct pci_dev *pdev, const struct pci_device_id *ent) - bp->pdev->irq, print_mac(mac, dev->dev_addr)); - - return 0; -+ -+error: -+ if (bp->regview) -+ iounmap(bp->regview); -+ pci_release_regions(pdev); -+ pci_disable_device(pdev); -+ pci_set_drvdata(pdev, NULL); -+ free_netdev(dev); -+ return rc; - } - - static void __devexit -@@ -7749,6 +7752,8 @@ bnx2_remove_one(struct pci_dev *pdev) - if (bp->regview) - iounmap(bp->regview); - -+ release_firmware(bp->firmware); -+ - free_netdev(dev); - pci_release_regions(pdev); - pci_disable_device(pdev); -diff --git a/drivers/net/bnx2.h b/drivers/net/bnx2.h -index c3c579f..15e837e 100644 ---- a/drivers/net/bnx2.h -+++ b/drivers/net/bnx2.h -@@ -6860,6 +6860,7 @@ struct bnx2 { - - u32 idle_chk_status_idx; - -+ const struct firmware *firmware; - }; - - #define REG_RD(bp, offset) \ -@@ -6890,44 +6892,6 @@ struct cpu_reg { - u32 mips_view_base; - }; - --struct fw_info { -- const u32 ver_major; -- const u32 ver_minor; -- const u32 ver_fix; -- -- const u32 start_addr; -- -- /* Text section. */ -- const u32 text_addr; -- const u32 text_len; -- const u32 text_index; -- __le32 *text; -- u8 *gz_text; -- const u32 gz_text_len; -- -- /* Data section. */ -- const u32 data_addr; -- const u32 data_len; -- const u32 data_index; -- const u32 *data; -- -- /* SBSS section. */ -- const u32 sbss_addr; -- const u32 sbss_len; -- const u32 sbss_index; -- -- /* BSS section. */ -- const u32 bss_addr; -- const u32 bss_len; -- const u32 bss_index; -- -- /* Read-only section. */ -- const u32 rodata_addr; -- const u32 rodata_len; -- const u32 rodata_index; -- const u32 *rodata; --}; -- - #define RV2P_PROC1 0 - #define RV2P_PROC2 1 - -diff --git a/drivers/net/bnx2_cpu.h b/drivers/net/bnx2_cpu.h -new file mode 100644 -index 0000000..940eb91 ---- /dev/null -+++ b/drivers/net/bnx2_cpu.h -@@ -0,0 +1,88 @@ -+/* bnx2_fw.h: Broadcom NX2 network driver. -+ * -+ * Copyright (c) 2004, 2005, 2006, 2007 Broadcom Corporation -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License as published by -+ * the Free Software Foundation. -+ */ -+ -+/* Initialized Values for the Completion Processor. */ -+static const struct cpu_reg cpu_reg_com = { -+ .mode = BNX2_COM_CPU_MODE, -+ .mode_value_halt = BNX2_COM_CPU_MODE_SOFT_HALT, -+ .mode_value_sstep = BNX2_COM_CPU_MODE_STEP_ENA, -+ .state = BNX2_COM_CPU_STATE, -+ .state_value_clear = 0xffffff, -+ .gpr0 = BNX2_COM_CPU_REG_FILE, -+ .evmask = BNX2_COM_CPU_EVENT_MASK, -+ .pc = BNX2_COM_CPU_PROGRAM_COUNTER, -+ .inst = BNX2_COM_CPU_INSTRUCTION, -+ .bp = BNX2_COM_CPU_HW_BREAKPOINT, -+ .spad_base = BNX2_COM_SCRATCH, -+ .mips_view_base = 0x8000000, -+}; -+ -+/* Initialized Values the Command Processor. */ -+static const struct cpu_reg cpu_reg_cp = { -+ .mode = BNX2_CP_CPU_MODE, -+ .mode_value_halt = BNX2_CP_CPU_MODE_SOFT_HALT, -+ .mode_value_sstep = BNX2_CP_CPU_MODE_STEP_ENA, -+ .state = BNX2_CP_CPU_STATE, -+ .state_value_clear = 0xffffff, -+ .gpr0 = BNX2_CP_CPU_REG_FILE, -+ .evmask = BNX2_CP_CPU_EVENT_MASK, -+ .pc = BNX2_CP_CPU_PROGRAM_COUNTER, -+ .inst = BNX2_CP_CPU_INSTRUCTION, -+ .bp = BNX2_CP_CPU_HW_BREAKPOINT, -+ .spad_base = BNX2_CP_SCRATCH, -+ .mips_view_base = 0x8000000, -+}; -+ -+/* Initialized Values for the RX Processor. */ -+static const struct cpu_reg cpu_reg_rxp = { -+ .mode = BNX2_RXP_CPU_MODE, -+ .mode_value_halt = BNX2_RXP_CPU_MODE_SOFT_HALT, -+ .mode_value_sstep = BNX2_RXP_CPU_MODE_STEP_ENA, -+ .state = BNX2_RXP_CPU_STATE, -+ .state_value_clear = 0xffffff, -+ .gpr0 = BNX2_RXP_CPU_REG_FILE, -+ .evmask = BNX2_RXP_CPU_EVENT_MASK, -+ .pc = BNX2_RXP_CPU_PROGRAM_COUNTER, -+ .inst = BNX2_RXP_CPU_INSTRUCTION, -+ .bp = BNX2_RXP_CPU_HW_BREAKPOINT, -+ .spad_base = BNX2_RXP_SCRATCH, -+ .mips_view_base = 0x8000000, -+}; -+ -+/* Initialized Values for the TX Patch-up Processor. */ -+static const struct cpu_reg cpu_reg_tpat = { -+ .mode = BNX2_TPAT_CPU_MODE, -+ .mode_value_halt = BNX2_TPAT_CPU_MODE_SOFT_HALT, -+ .mode_value_sstep = BNX2_TPAT_CPU_MODE_STEP_ENA, -+ .state = BNX2_TPAT_CPU_STATE, -+ .state_value_clear = 0xffffff, -+ .gpr0 = BNX2_TPAT_CPU_REG_FILE, -+ .evmask = BNX2_TPAT_CPU_EVENT_MASK, -+ .pc = BNX2_TPAT_CPU_PROGRAM_COUNTER, -+ .inst = BNX2_TPAT_CPU_INSTRUCTION, -+ .bp = BNX2_TPAT_CPU_HW_BREAKPOINT, -+ .spad_base = BNX2_TPAT_SCRATCH, -+ .mips_view_base = 0x8000000, -+}; -+ -+/* Initialized Values for the TX Processor. */ -+static const struct cpu_reg cpu_reg_txp = { -+ .mode = BNX2_TXP_CPU_MODE, -+ .mode_value_halt = BNX2_TXP_CPU_MODE_SOFT_HALT, -+ .mode_value_sstep = BNX2_TXP_CPU_MODE_STEP_ENA, -+ .state = BNX2_TXP_CPU_STATE, -+ .state_value_clear = 0xffffff, -+ .gpr0 = BNX2_TXP_CPU_REG_FILE, -+ .evmask = BNX2_TXP_CPU_EVENT_MASK, -+ .pc = BNX2_TXP_CPU_PROGRAM_COUNTER, -+ .inst = BNX2_TXP_CPU_INSTRUCTION, -+ .bp = BNX2_TXP_CPU_HW_BREAKPOINT, -+ .spad_base = BNX2_TXP_SCRATCH, -+ .mips_view_base = 0x8000000, -+}; -diff --git a/drivers/net/bnx2_fw_file.h b/drivers/net/bnx2_fw_file.h -new file mode 100644 -index 0000000..06c003c ---- /dev/null -+++ b/drivers/net/bnx2_fw_file.h -@@ -0,0 +1,25 @@ -+struct bnx2_fw_file_section { -+ uint32_t addr; -+ uint32_t len; -+ uint32_t offset; -+}; -+ -+struct bnx2_fw_file_entry { -+ uint32_t start_addr; -+ struct bnx2_fw_file_section text; -+ struct bnx2_fw_file_section data; -+ struct bnx2_fw_file_section sbss; -+ struct bnx2_fw_file_section bss; -+ struct bnx2_fw_file_section rodata; -+}; -+ -+struct bnx2_fw_file { -+ struct bnx2_fw_file_entry com; -+ struct bnx2_fw_file_entry cp; -+ struct bnx2_fw_file_entry rxp; -+ struct bnx2_fw_file_entry tpat; -+ struct bnx2_fw_file_entry txp; -+ struct bnx2_fw_file_section rv2p_proc1; -+ struct bnx2_fw_file_section rv2p_proc2; -+}; -+ ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -2327,3 +2327,3 @@ config BNX2 - tristate "Broadcom NetXtremeII support" -- depends on BROKEN -+ select FW_LOADER - depends on PCI diff --git a/debian/patches/debian/dfsg/drivers-staging-me4000-disable.patch b/debian/patches/debian/dfsg/drivers-staging-me4000-disable.patch new file mode 100644 index 000000000..f4c4f20d6 --- /dev/null +++ b/debian/patches/debian/dfsg/drivers-staging-me4000-disable.patch @@ -0,0 +1,12 @@ +diff --git a/drivers/staging/me4000/Kconfig b/drivers/staging/me4000/Kconfig +index 5e6c9de..45d2ea9 100644 +--- a/drivers/staging/me4000/Kconfig ++++ b/drivers/staging/me4000/Kconfig +@@ -1,6 +1,7 @@ + config ME4000 + tristate "Meilhaus ME-4000 support" + default n ++ depends on BROKEN + depends on PCI + help + This driver supports the Meilhaus ME-4000 family of boards diff --git a/debian/patches/debian/dfsg/drivers-staging-otus-disable.patch b/debian/patches/debian/dfsg/drivers-staging-otus-disable.patch new file mode 100644 index 000000000..a4d805806 --- /dev/null +++ b/debian/patches/debian/dfsg/drivers-staging-otus-disable.patch @@ -0,0 +1,11 @@ +diff --git a/drivers/staging/otus/Kconfig b/drivers/staging/otus/Kconfig +index d549d08..fef9785 100644 +--- a/drivers/staging/otus/Kconfig ++++ b/drivers/staging/otus/Kconfig +@@ -1,5 +1,6 @@ + config OTUS + tristate "Atheros OTUS 802.11n USB wireless support" ++ depends on BROKEN + depends on USB && WLAN_80211 && MAC80211 + default N + ---help--- diff --git a/debian/patches/debian/dfsg/drivers-staging-rt2860-disable.patch b/debian/patches/debian/dfsg/drivers-staging-rt2860-disable.patch new file mode 100644 index 000000000..e06d68f49 --- /dev/null +++ b/debian/patches/debian/dfsg/drivers-staging-rt2860-disable.patch @@ -0,0 +1,11 @@ +diff --git a/drivers/staging/rt2860/Kconfig b/drivers/staging/rt2860/Kconfig +index 7f44e5e..9fb130d 100644 +--- a/drivers/staging/rt2860/Kconfig ++++ b/drivers/staging/rt2860/Kconfig +@@ -1,5 +1,6 @@ + config RT2860 + tristate "Ralink 2860 wireless support" ++ depends on BROKEN + depends on PCI && X86 && WLAN_80211 + ---help--- + This is an experimental driver for the Ralink 2860 wireless chip. diff --git a/debian/patches/debian/dfsg/drivers-staging-rt2870-disable.patch b/debian/patches/debian/dfsg/drivers-staging-rt2870-disable.patch new file mode 100644 index 000000000..f8f7610cc --- /dev/null +++ b/debian/patches/debian/dfsg/drivers-staging-rt2870-disable.patch @@ -0,0 +1,11 @@ +diff --git a/drivers/staging/rt2870/Kconfig b/drivers/staging/rt2870/Kconfig +index 8398d97..cd4f0b6 100644 +--- a/drivers/staging/rt2870/Kconfig ++++ b/drivers/staging/rt2870/Kconfig +@@ -1,5 +1,6 @@ + config RT2870 + tristate "Ralink 2870 wireless support" ++ depends on BROKEN + depends on USB && X86 && WLAN_80211 + ---help--- + This is an experimental driver for the Ralink 2870 wireless chip. diff --git a/debian/patches/debian/dfsg/files-1 b/debian/patches/debian/dfsg/files-1 index 47df964d7..1f9bb6036 100644 --- a/debian/patches/debian/dfsg/files-1 +++ b/debian/patches/debian/dfsg/files-1 @@ -2,8 +2,10 @@ rm Documentation/netlabel/draft-ietf-cipso-ipsecurity-01.txt rm firmware/*.HEX rm firmware/*.ihex +rm firmware/3com rm firmware/acenic rm firmware/adaptec +rm firmware/bnx2 rm firmware/cpia2 rm firmware/cxgb3 rm firmware/dabusb @@ -15,11 +17,18 @@ rm firmware/ess rm firmware/kaweth rm firmware/keyspan rm firmware/korg +rm firmware/myricom +rm firmware/ositech +rm firmware/qlogic rm firmware/sb16 +rm firmware/slicoss rm firmware/sun +rm firmware/sxg +rm firmware/tehuti rm firmware/tigon rm firmware/ttusb-budget rm firmware/vicam +rm firmware/yam rm firmware/yamaha rm drivers/gpu/drm/mga/mga_ucode.h @@ -38,24 +47,15 @@ rm drivers/net/bnx2_fw2.h rm drivers/net/bnx2x_init_values.h -rm drivers/net/hamradio/yam1200.h -rm drivers/net/hamradio/yam9600.h - -rm drivers/net/myri_code.h - -rm drivers/net/tehuti_fw.h - -rm drivers/net/tokenring/3c359.c -rm drivers/net/tokenring/3c359.h -rm drivers/net/tokenring/3c359_microcode.h - -rm drivers/net/typhoon-firmware.h - -rm drivers/scsi/ql1040_fw.h -rm drivers/scsi/ql12160_fw.h -rm drivers/scsi/ql1280_fw.h - -rm drivers/scsi/qlogicpti_asm.c +rm drivers/staging/me4000/me*_firmware.h + +rm drivers/staging/otus/hal/hp*fw*.c + +rm drivers/staging/rt2860/common/firmware.h + +rm drivers/staging/rt2870/common/firmware.h + +rm drivers/staging/slicoss/*ucode.h rm sound/pci/cs46xx/cs46xx_image.h rm sound/pci/cs46xx/imgs diff --git a/debian/patches/debian/dfsg/firmware-cleanup.patch b/debian/patches/debian/dfsg/firmware-cleanup.patch index 0a161a9e8..5da99aece 100644 --- a/debian/patches/debian/dfsg/firmware-cleanup.patch +++ b/debian/patches/debian/dfsg/firmware-cleanup.patch @@ -1,8 +1,8 @@ diff --git a/firmware/Makefile b/firmware/Makefile -index 466106f..fea3504 100644 +index 1e7fd4d..fea3504 100644 --- a/firmware/Makefile +++ b/firmware/Makefile -@@ -20,75 +20,9 @@ fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE)) +@@ -20,96 +20,8 @@ fw-external-y := $(subst ",,$(CONFIG_EXTRA_FIRMWARE)) # accurate. In the latter case it doesn't matter -- it'll use $(fw-shipped-all). # But be aware that the config file might not be included at all. @@ -12,19 +12,31 @@ index 466106f..fea3504 100644 -else -acenic-objs := acenic/tg1.bin acenic/tg2.bin -endif +-fw-shipped-$(CONFIG_3C359) += 3com/3C359.bin -fw-shipped-$(CONFIG_ACENIC) += $(acenic-objs) -fw-shipped-$(CONFIG_ADAPTEC_STARFIRE) += adaptec/starfire_rx.bin \ - adaptec/starfire_tx.bin - fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin +-fw-shipped-$(CONFIG_ATARI_DSP56K) += dsp56k/bootstrap.bin -fw-shipped-$(CONFIG_ATM_AMBASSADOR) += atmsar11.fw +-fw-shipped-$(CONFIG_BNX2) += bnx2/bnx2-mips-09-4.6.17.fw \ +- bnx2/bnx2-rv2p-09-4.6.15.fw \ +- bnx2/bnx2-mips-06-4.6.16.fw \ +- bnx2/bnx2-rv2p-06-4.6.16.fw -fw-shipped-$(CONFIG_CASSINI) += sun/cassini.bin -fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin -fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \ - cxgb3/t3c_psram-1.1.0.bin \ -- cxgb3/t3fw-7.0.0.bin +- cxgb3/t3fw-7.1.0.bin -fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin -fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \ - e100/d102e_ucode.bin +-fw-shipped-$(CONFIG_MYRI_SBUS) += myricom/lanai.bin +-fw-shipped-$(CONFIG_PCMCIA_SMC91C92) += ositech/Xilinx7OD.bin +-fw-shipped-$(CONFIG_SCSI_ADVANSYS) += advansys/mcode.bin advansys/38C1600.bin \ +- advansys/3550.bin advansys/38C0800.bin +-fw-shipped-$(CONFIG_SCSI_QLOGIC_1280) += qlogic/1040.bin qlogic/1280.bin \ +- qlogic/12160.bin +-fw-shipped-$(CONFIG_SCSI_QLOGICPTI) += qlogic/isp1000.bin -fw-shipped-$(CONFIG_SMCTR) += tr_smctr.bin -fw-shipped-$(CONFIG_SND_KORG1212) += korg/k1212.dsp -fw-shipped-$(CONFIG_SND_MAESTRO3) += ess/maestro3_assp_kernel.fw \ @@ -33,10 +45,18 @@ index 466106f..fea3504 100644 - sb16/ima_adpcm_init.csp \ - sb16/ima_adpcm_playback.csp \ - sb16/ima_adpcm_capture.csp +-fw-shipped-$(CONFIG_SLICOSS) += slicoss/gbdownload.sys slicoss/gbrcvucode.sys \ +- slicoss/oasisdbgdownload.sys \ +- slicoss/oasisdownload.sys \ +- slicoss/oasisrcvucode.sys +-fw-shipped-$(CONFIG_SXG) += sxg/saharadownloadB.sys \ +- sxg/saharadbgdownloadB.sys -fw-shipped-$(CONFIG_SND_YMFPCI) += yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw \ - yamaha/ds1e_ctrl.fw +-fw-shipped-$(CONFIG_TEHUTI) += tehuti/bdx.bin -fw-shipped-$(CONFIG_TIGON3) += tigon/tg3.bin tigon/tg3_tso.bin \ - tigon/tg3_tso5.bin +-fw-shipped-$(CONFIG_TYPHOON) += 3com/typhoon.bin -fw-shipped-$(CONFIG_USB_DABUSB) += dabusb/firmware.fw dabusb/bitstream.bin -fw-shipped-$(CONFIG_USB_EMI26) += emi26/loader.fw emi26/firmware.fw \ - emi26/bitstream.fw @@ -75,6 +95,7 @@ index 466106f..fea3504 100644 fw-shipped-$(CONFIG_USB_SERIAL_XIRCOM) += keyspan_pda/xircom_pgs.fw -fw-shipped-$(CONFIG_USB_VICAM) += vicam/firmware.fw -fw-shipped-$(CONFIG_VIDEO_CPIA2) += cpia2/stv0672_vp4.bin +-fw-shipped-$(CONFIG_YAM) += yam/1200.bin yam/9600.bin fw-shipped-all := $(fw-shipped-y) $(fw-shipped-m) $(fw-shipped-) diff --git a/debian/patches/features/all/drivers-net-tehuti-request_firmware.patch b/debian/patches/features/all/drivers-net-tehuti-request_firmware.patch deleted file mode 100644 index 5124aee2c..000000000 --- a/debian/patches/features/all/drivers-net-tehuti-request_firmware.patch +++ /dev/null @@ -1,131 +0,0 @@ -From de21b16293fc9251aa28f501c8fb2399298cc6b3 Mon Sep 17 00:00:00 2001 -From: Ben Hutchings -Date: Sun, 22 Feb 2009 19:22:39 +0000 -Subject: [PATCH 06/18] tehuti: Use request_firmware() - -Firmware blob is little endian. - -Compile-tested only. ---- - drivers/net/Kconfig | 2 +- - drivers/net/tehuti.c | 39 ++++++++++++++++++++++----------------- - drivers/net/tehuti.h | 1 + - 3 files changed, 24 insertions(+), 18 deletions(-) - -diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig -index 8ea6b4f..9e78152 100644 ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -2584,7 +2584,7 @@ config MLX4_DEBUG - config TEHUTI - tristate "Tehuti Networks 10G Ethernet" - depends on PCI -- depends on BROKEN -+ select FW_LOADER - help - Tehuti Networks 10G Ethernet NIC - -diff --git a/drivers/net/tehuti.c b/drivers/net/tehuti.c -index a7a4dc4..934d976 100644 ---- a/drivers/net/tehuti.c -+++ b/drivers/net/tehuti.c -@@ -63,7 +63,6 @@ - */ - - #include "tehuti.h" --#include "tehuti_fw.h" - - static struct pci_device_id __devinitdata bdx_pci_tbl[] = { - {0x1FC9, 0x3009, PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0}, -@@ -318,28 +317,41 @@ static int bdx_poll(struct napi_struct *napi, int budget) - - static int bdx_fw_load(struct bdx_priv *priv) - { -+ const struct firmware *fw = NULL; - int master, i; -+ int rc; - - ENTER; - master = READ_REG(priv, regINIT_SEMAPHORE); - if (!READ_REG(priv, regINIT_STATUS) && master) { -- bdx_tx_push_desc_safe(priv, s_firmLoad, sizeof(s_firmLoad)); -+ rc = request_firmware(&fw, "tehuti/firmware.bin", &priv->pdev->dev); -+ if (rc) -+ goto out; -+ bdx_tx_push_desc_safe(priv, (char *)fw->data, fw->size); - mdelay(100); - } - for (i = 0; i < 200; i++) { -- if (READ_REG(priv, regINIT_STATUS)) -- break; -+ if (READ_REG(priv, regINIT_STATUS)) { -+ rc = 0; -+ goto out; -+ } - mdelay(2); - } -+ rc = -EIO; -+out: - if (master) - WRITE_REG(priv, regINIT_SEMAPHORE, 1); -+ if (fw) -+ release_firmware(fw); - -- if (i == 200) { -+ if (rc) { - ERR("%s: firmware loading failed\n", priv->ndev->name); -- DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n", -- READ_REG(priv, regVPC), -- READ_REG(priv, regVIC), READ_REG(priv, regINIT_STATUS), i); -- RET(-EIO); -+ if (rc == -EIO) -+ DBG("VPC = 0x%x VIC = 0x%x INIT_STATUS = 0x%x i=%d\n", -+ READ_REG(priv, regVPC), -+ READ_REG(priv, regVIC), -+ READ_REG(priv, regINIT_STATUS), i); -+ RET(rc); - } else { - DBG("%s: firmware loading success\n", priv->ndev->name); - RET(0); -@@ -617,13 +629,6 @@ err: - RET(rc); - } - --static void __init bdx_firmware_endianess(void) --{ -- int i; -- for (i = 0; i < ARRAY_SIZE(s_firmLoad); i++) -- s_firmLoad[i] = CPU_CHIP_SWAP32(s_firmLoad[i]); --} -- - static int bdx_range_check(struct bdx_priv *priv, u32 offset) - { - return (offset > (u32) (BDX_REGS_SIZE / priv->nic->port_num)) ? -@@ -2501,7 +2506,6 @@ static void __init print_driver_id(void) - static int __init bdx_module_init(void) - { - ENTER; -- bdx_firmware_endianess(); - init_txd_sizes(); - print_driver_id(); - RET(pci_register_driver(&bdx_pci_driver)); -@@ -2521,3 +2525,4 @@ module_exit(bdx_module_exit); - MODULE_LICENSE("GPL"); - MODULE_AUTHOR(DRIVER_AUTHOR); - MODULE_DESCRIPTION(BDX_DRV_DESC); -+MODULE_FIRMWARE("tehuti/firmware.bin"); -diff --git a/drivers/net/tehuti.h b/drivers/net/tehuti.h -index efaf84d..dec67e0 100644 ---- a/drivers/net/tehuti.h -+++ b/drivers/net/tehuti.h -@@ -29,6 +29,7 @@ - #include - #include - #include -+#include - #include - - /* Compile Time Switches */ --- -1.6.1.3 - diff --git a/debian/patches/features/all/drivers-net-typhoon-request_firmware.patch b/debian/patches/features/all/drivers-net-typhoon-request_firmware.patch deleted file mode 100644 index 5bc98fc7d..000000000 --- a/debian/patches/features/all/drivers-net-typhoon-request_firmware.patch +++ /dev/null @@ -1,176 +0,0 @@ -commit 3185588805914cbaedae010d9c7f238f119a4ed3 -Author: Ben Hutchings -Date: Sun Feb 22 19:25:27 2009 +0000 - - typhoon: Use request_firmware() - - Based on a patch by Jaswinder Singh and - fixes for my bugs by David Dillow . - -diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig -index 05f99fd..6134136 100644 ---- a/drivers/net/Kconfig -+++ b/drivers/net/Kconfig -@@ -733,7 +733,7 @@ config VORTEX - config TYPHOON - tristate "3cr990 series \"Typhoon\" support" - depends on NET_VENDOR_3COM && PCI -- depends on BROKEN -+ select FW_LOADER - select CRC32 - ---help--- - This option enables driver support for the 3cr990 series of cards: -diff --git a/drivers/net/typhoon.c b/drivers/net/typhoon.c -index 3af9a95..e907e86 100644 ---- a/drivers/net/typhoon.c -+++ b/drivers/net/typhoon.c -@@ -104,6 +104,7 @@ static const int multicast_filter_limit = 32; - #define DRV_MODULE_RELDATE "06/11/09" - #define PFX DRV_MODULE_NAME ": " - #define ERR_PFX KERN_ERR PFX -+#define FIRMWARE_NAME "3com/typhoon.bin" - - #include - #include -@@ -129,9 +130,9 @@ static const int multicast_filter_limit = 32; - #include - #include - #include -+#include - - #include "typhoon.h" --#include "typhoon-firmware.h" - - static char version[] __devinitdata = - "typhoon.c: version " DRV_MODULE_VERSION " (" DRV_MODULE_RELDATE ")\n"; -@@ -139,6 +140,7 @@ static char version[] __devinitdata = - MODULE_AUTHOR("David Dillow "); - MODULE_VERSION(DRV_MODULE_VERSION); - MODULE_LICENSE("GPL"); -+MODULE_FIRMWARE(FIRMWARE_NAME); - MODULE_DESCRIPTION("3Com Typhoon Family (3C990, 3CR990, and variants)"); - MODULE_PARM_DESC(rx_copybreak, "Packets smaller than this are copied and " - "the buffer given back to the NIC. Default " -@@ -1344,14 +1346,74 @@ typhoon_init_rings(struct typhoon *tp) - tp->txHiRing.lastRead = 0; - } - -+static const struct firmware *typhoon_fw; -+ -+static int -+typhoon_request_firmware(struct typhoon *tp) -+{ -+ const struct typhoon_file_header *fHdr; -+ const struct typhoon_section_header *sHdr; -+ const u8 *image_data; -+ u32 numSections; -+ u32 section_len; -+ u32 remaining; -+ int err; -+ -+ if (typhoon_fw) -+ return 0; -+ -+ err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev); -+ if (err) { -+ printk(KERN_ERR "%s: Failed to load firmware \"%s\"\n", -+ tp->name, FIRMWARE_NAME); -+ return err; -+ } -+ -+ image_data = (u8 *) typhoon_fw->data; -+ remaining = typhoon_fw->size; -+ if (remaining < sizeof(struct typhoon_file_header)) -+ goto invalid_fw; -+ -+ fHdr = (struct typhoon_file_header *) image_data; -+ if (memcmp(fHdr->tag, "TYPHOON", 8)) -+ goto invalid_fw; -+ -+ numSections = le32_to_cpu(fHdr->numSections); -+ image_data += sizeof(struct typhoon_file_header); -+ remaining -= sizeof(struct typhoon_file_header); -+ -+ while (numSections--) { -+ if (remaining < sizeof(struct typhoon_section_header)) -+ goto invalid_fw; -+ -+ sHdr = (struct typhoon_section_header *) image_data; -+ image_data += sizeof(struct typhoon_section_header); -+ section_len = le32_to_cpu(sHdr->len); -+ -+ if (remaining < section_len) -+ goto invalid_fw; -+ -+ image_data += section_len; -+ remaining -= section_len; -+ } -+ -+ return 0; -+ -+invalid_fw: -+ printk(KERN_ERR "%s: Invalid firmware image\n", tp->name); -+ release_firmware(typhoon_fw); -+ typhoon_fw = NULL; -+ return -EINVAL; -+} -+ - static int - typhoon_download_firmware(struct typhoon *tp) - { - void __iomem *ioaddr = tp->ioaddr; - struct pci_dev *pdev = tp->pdev; -- struct typhoon_file_header *fHdr; -- struct typhoon_section_header *sHdr; -- u8 *image_data; -+ const struct typhoon_file_header *fHdr; -+ const struct typhoon_section_header *sHdr; -+ const u8 *image_data; - void *dpage; - dma_addr_t dpage_dma; - __sum16 csum; -@@ -1365,20 +1427,12 @@ typhoon_download_firmware(struct typhoon *tp) - int i; - int err; - -- err = -EINVAL; -- fHdr = (struct typhoon_file_header *) typhoon_firmware_image; -- image_data = (u8 *) fHdr; -- -- if(memcmp(fHdr->tag, "TYPHOON", 8)) { -- printk(KERN_ERR "%s: Invalid firmware image!\n", tp->name); -- goto err_out; -- } -+ image_data = (u8 *) typhoon_fw->data; -+ fHdr = (struct typhoon_file_header *) image_data; - - /* Cannot just map the firmware image using pci_map_single() as -- * the firmware is part of the kernel/module image, so we allocate -- * some consistent memory to copy the sections into, as it is simpler, -- * and short-lived. If we ever split out and require a userland -- * firmware loader, then we can revisit this. -+ * the firmware is vmalloc()'d and may not be physically contiguous, -+ * so we allocate some consistent memory to copy the sections into. - */ - err = -ENOMEM; - dpage = pci_alloc_consistent(pdev, PAGE_SIZE, &dpage_dma); -@@ -2086,6 +2140,10 @@ typhoon_open(struct net_device *dev) - struct typhoon *tp = netdev_priv(dev); - int err; - -+ err = typhoon_request_firmware(tp); -+ if (err) -+ goto out; -+ - err = typhoon_wakeup(tp, WaitSleep); - if(err < 0) { - printk(KERN_ERR "%s: unable to wakeup device\n", dev->name); -@@ -2624,6 +2682,8 @@ typhoon_init(void) - static void __exit - typhoon_cleanup(void) - { -+ if (typhoon_fw) -+ release_firmware(typhoon_fw); - pci_unregister_driver(&typhoon_driver); - } - diff --git a/debian/patches/features/all/drivers-scsi-qla1280-request_firmware.patch b/debian/patches/features/all/drivers-scsi-qla1280-request_firmware.patch deleted file mode 100644 index 462af0d6b..000000000 --- a/debian/patches/features/all/drivers-scsi-qla1280-request_firmware.patch +++ /dev/null @@ -1,296 +0,0 @@ -From 8217f31fa9232dad67b0d596e9f7e6678ad44616 Mon Sep 17 00:00:00 2001 -From: Ben Hutchings -Date: Sat, 18 Oct 2008 16:43:31 +0100 -Subject: [PATCH 24/24] qla1280: use request_firmware - -Based on patch by Jaswinder Singh -and David Woodhouse - -Firmware blob is little endian looks like this... - unsigned char Version1 - unsigned char Version2 - unsigned char Version3 - unsigned char Padding - unsigned short start_address - unsigned short data ---- - drivers/scsi/Kconfig | 2 +- - drivers/scsi/qla1280.c | 116 +++++++++++++++++++++++++++++++----------------- - drivers/scsi/qla1280.h | 6 +++ - 3 files changed, 82 insertions(+), 42 deletions(-) - -diff --git a/drivers/scsi/Kconfig b/drivers/scsi/Kconfig -index 3d97641..0fca0d2 100644 ---- a/drivers/scsi/Kconfig -+++ b/drivers/scsi/Kconfig -@@ -1328,7 +1328,7 @@ config SCSI_QLOGIC_FAS - config SCSI_QLOGIC_1280 - tristate "Qlogic QLA 1240/1x80/1x160 SCSI support" - depends on PCI && SCSI -- depends on BROKEN -+ select FW_LOADER - help - Say Y if you have a QLogic ISP1240/1x80/1x160 SCSI host adapter. - -diff --git a/drivers/scsi/qla1280.c b/drivers/scsi/qla1280.c -index b6cd12b..5536676 100644 ---- a/drivers/scsi/qla1280.c -+++ b/drivers/scsi/qla1280.c -@@ -348,6 +348,7 @@ - #include - #include - #include -+#include - - #include - #include -@@ -384,11 +385,7 @@ - #define MEMORY_MAPPED_IO 1 - #endif - --#define UNIQUE_FW_NAME - #include "qla1280.h" --#include "ql12160_fw.h" /* ISP RISC codes */ --#include "ql1280_fw.h" --#include "ql1040_fw.h" - - #ifndef BITS_PER_LONG - #error "BITS_PER_LONG not defined!" -@@ -541,10 +538,7 @@ __setup("qla1280=", qla1280_setup); - struct qla_boards { - unsigned char name[9]; /* Board ID String */ - int numPorts; /* Number of SCSI ports */ -- unsigned short *fwcode; /* pointer to FW array */ -- unsigned short *fwlen; /* number of words in array */ -- unsigned short *fwstart; /* start address for F/W */ -- unsigned char *fwver; /* Ptr to F/W version array */ -+ char *fwname; /* firmware name */ - }; - - /* NOTE: the last argument in each entry is used to index ql1280_board_tbl */ -@@ -567,19 +561,13 @@ MODULE_DEVICE_TABLE(pci, qla1280_pci_tbl); - - static struct qla_boards ql1280_board_tbl[] = { - /* Name , Number of ports, FW details */ -- {"QLA12160", 2, &fw12160i_code01[0], &fw12160i_length01, -- &fw12160i_addr01, &fw12160i_version_str[0]}, -- {"QLA1040", 1, &risc_code01[0], &risc_code_length01, -- &risc_code_addr01, &firmware_version[0]}, -- {"QLA1080", 1, &fw1280ei_code01[0], &fw1280ei_length01, -- &fw1280ei_addr01, &fw1280ei_version_str[0]}, -- {"QLA1240", 2, &fw1280ei_code01[0], &fw1280ei_length01, -- &fw1280ei_addr01, &fw1280ei_version_str[0]}, -- {"QLA1280", 2, &fw1280ei_code01[0], &fw1280ei_length01, -- &fw1280ei_addr01, &fw1280ei_version_str[0]}, -- {"QLA10160", 1, &fw12160i_code01[0], &fw12160i_length01, -- &fw12160i_addr01, &fw12160i_version_str[0]}, -- {" ", 0} -+ {"QLA12160", 2, "qlogic/12160.bin"}, -+ {"QLA1040", 1, "qlogic/1040.bin"}, -+ {"QLA1080", 1, "qlogic/1280.bin"}, -+ {"QLA1240", 2, "qlogic/1280.bin"}, -+ {"QLA1280", 2, "qlogic/1280.bin"}, -+ {"QLA10160", 1, "qlogic/12160.bin"}, -+ {" ", 0, " "}, - }; - - static int qla1280_verbose = 1; -@@ -704,7 +692,7 @@ qla1280_info(struct Scsi_Host *host) - sprintf (bp, - "QLogic %s PCI to SCSI Host Adapter\n" - " Firmware version: %2d.%02d.%02d, Driver version %s", -- &bdp->name[0], bdp->fwver[0], bdp->fwver[1], bdp->fwver[2], -+ &bdp->name[0], ha->fwver1, ha->fwver2, ha->fwver3, - QLA1280_VERSION); - return bp; - } -@@ -1648,36 +1636,60 @@ qla1280_chip_diag(struct scsi_qla_host *ha) - static int - qla1280_load_firmware_pio(struct scsi_qla_host *ha) - { -- uint16_t risc_address, *risc_code_address, risc_code_size; -+ const struct firmware *fw; -+ const __le16 *fw_data; -+ uint16_t risc_address, risc_code_size; - uint16_t mb[MAILBOX_REGISTER_COUNT], i; - int err; - -+ err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, -+ &ha->pdev->dev); -+ if (err) { -+ printk(KERN_ERR "Failed to load image \"%s\" err %d\n", -+ ql1280_board_tbl[ha->devnum].fwname, err); -+ return err; -+ } -+ if ((fw->size % 2) || (fw->size < 6)) { -+ printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", -+ fw->size, ql1280_board_tbl[ha->devnum].fwname); -+ err = -EINVAL; -+ goto out; -+ } -+ ha->fwver1 = fw->data[0]; -+ ha->fwver2 = fw->data[1]; -+ ha->fwver3 = fw->data[2]; -+ fw_data = (const __le16 *)&fw->data[0]; -+ ha->fwstart = __le16_to_cpu(fw_data[2]); -+ - /* Load RISC code. */ -- risc_address = *ql1280_board_tbl[ha->devnum].fwstart; -- risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; -- risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; -+ risc_address = ha->fwstart; -+ fw_data = (const __le16 *)&fw->data[4]; -+ risc_code_size = (fw->size - 6) / 2; - - for (i = 0; i < risc_code_size; i++) { - mb[0] = MBC_WRITE_RAM_WORD; - mb[1] = risc_address + i; -- mb[2] = risc_code_address[i]; -+ mb[2] = __le16_to_cpu(fw_data[i]); - - err = qla1280_mailbox_command(ha, BIT_0 | BIT_1 | BIT_2, mb); - if (err) { - printk(KERN_ERR "scsi(%li): Failed to load firmware\n", - ha->host_no); -- return err; -+ goto out; - } - } -- -- return 0; -+out: -+ release_firmware(fw); -+ return err; - } - - #define DUMP_IT_BACK 0 /* for debug of RISC loading */ - static int - qla1280_load_firmware_dma(struct scsi_qla_host *ha) - { -- uint16_t risc_address, *risc_code_address, risc_code_size; -+ const struct firmware *fw; -+ const __le16 *fw_data; -+ uint16_t risc_address, risc_code_size; - uint16_t mb[MAILBOX_REGISTER_COUNT], cnt; - int err = 0, num, i; - #if DUMP_IT_BACK -@@ -1689,10 +1701,29 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) - return -ENOMEM; - #endif - -+ err = request_firmware(&fw, ql1280_board_tbl[ha->devnum].fwname, -+ &ha->pdev->dev); -+ if (err) { -+ printk(KERN_ERR "Failed to load image \"%s\" err %d\n", -+ ql1280_board_tbl[ha->devnum].fwname, err); -+ return err; -+ } -+ if ((fw->size % 2) || (fw->size < 6)) { -+ printk(KERN_ERR "Bogus length %zu in image \"%s\"\n", -+ fw->size, ql1280_board_tbl[ha->devnum].fwname); -+ err = -EINVAL; -+ goto out; -+ } -+ ha->fwver1 = fw->data[0]; -+ ha->fwver2 = fw->data[1]; -+ ha->fwver3 = fw->data[2]; -+ fw_data = (const __le16 *)&fw->data[0]; -+ ha->fwstart = __le16_to_cpu(fw_data[2]); -+ - /* Load RISC code. */ -- risc_address = *ql1280_board_tbl[ha->devnum].fwstart; -- risc_code_address = ql1280_board_tbl[ha->devnum].fwcode; -- risc_code_size = *ql1280_board_tbl[ha->devnum].fwlen; -+ risc_address = ha->fwstart; -+ fw_data = (const __le16 *)&fw->data[4]; -+ risc_code_size = (fw->size - 6) / 2; - - dprintk(1, "%s: DMA RISC code (%i) words\n", - __func__, risc_code_size); -@@ -1708,10 +1739,9 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) - - dprintk(2, "qla1280_setup_chip: loading risc @ =(0x%p)," - "%d,%d(0x%x)\n", -- risc_code_address, cnt, num, risc_address); -+ fw_data, cnt, num, risc_address); - for(i = 0; i < cnt; i++) -- ((__le16 *)ha->request_ring)[i] = -- cpu_to_le16(risc_code_address[i]); -+ ((__le16 *)ha->request_ring)[i] = fw_data[i]; - - mb[0] = MBC_LOAD_RAM; - mb[1] = risc_address; -@@ -1763,7 +1793,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) - #endif - risc_address += cnt; - risc_code_size = risc_code_size - cnt; -- risc_code_address = risc_code_address + cnt; -+ fw_data = fw_data + cnt; - num++; - } - -@@ -1771,6 +1801,7 @@ qla1280_load_firmware_dma(struct scsi_qla_host *ha) - #if DUMP_IT_BACK - pci_free_consistent(ha->pdev, 8000, tbuf, p_tbuf); - #endif -+ release_firmware(fw); - return err; - } - -@@ -1786,7 +1817,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha) - /* Verify checksum of loaded RISC code. */ - mb[0] = MBC_VERIFY_CHECKSUM; - /* mb[1] = ql12_risc_code_addr01; */ -- mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; -+ mb[1] = ha->fwstart; - err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, mb); - if (err) { - printk(KERN_ERR "scsi(%li): RISC checksum failed.\n", ha->host_no); -@@ -1796,7 +1827,7 @@ qla1280_start_firmware(struct scsi_qla_host *ha) - /* Start firmware execution. */ - dprintk(1, "%s: start firmware running.\n", __func__); - mb[0] = MBC_EXECUTE_FIRMWARE; -- mb[1] = *ql1280_board_tbl[ha->devnum].fwstart; -+ mb[1] = ha->fwstart; - err = qla1280_mailbox_command(ha, BIT_1 | BIT_0, &mb[0]); - if (err) { - printk(KERN_ERR "scsi(%li): Failed to start firmware\n", -@@ -1821,7 +1852,7 @@ qla1280_load_firmware(struct scsi_qla_host *ha) - if (err) - goto out; - err = qla1280_start_firmware(ha); -- out: -+out: - return err; - } - -@@ -4451,6 +4482,9 @@ module_exit(qla1280_exit); - MODULE_AUTHOR("Qlogic & Jes Sorensen"); - MODULE_DESCRIPTION("Qlogic ISP SCSI (qla1x80/qla1x160) driver"); - MODULE_LICENSE("GPL"); -+MODULE_FIRMWARE("qlogic/1040.bin"); -+MODULE_FIRMWARE("qlogic/1280.bin"); -+MODULE_FIRMWARE("qlogic/12160.bin"); - MODULE_VERSION(QLA1280_VERSION); - - /* -diff --git a/drivers/scsi/qla1280.h b/drivers/scsi/qla1280.h -index ff2c363..d7c44b8 100644 ---- a/drivers/scsi/qla1280.h -+++ b/drivers/scsi/qla1280.h -@@ -1069,6 +1069,12 @@ struct scsi_qla_host { - - struct nvram nvram; - int nvram_valid; -+ -+ /* Firmware Info */ -+ unsigned short fwstart; /* start address for F/W */ -+ unsigned char fwver1; /* F/W version first char */ -+ unsigned char fwver2; /* F/W version second char */ -+ unsigned char fwver3; /* F/W version third char */ - }; - - #endif /* _QLA1280_H */ --- -1.6.1.3 - diff --git a/debian/patches/series/base b/debian/patches/series/base index 1faf9bf63..26597ad6e 100644 --- a/debian/patches/series/base +++ b/debian/patches/series/base @@ -6,14 +6,11 @@ + debian/drivers-ata-ata_piix-postpone-pata.patch + debian/drivers-ata-pata_sis-postpone-pata.patch -+ debian/dfsg/drivers-net-bnx2-request_firmware-1.patch + features/all/drivers-gpu-drm-mga-request_firmware.patch + features/all/drivers-gpu-drm-r128-request_firmware.patch -+ features/all/drivers-gpu-drm-radeon-request_firmware.patch -+ features/all/drivers-net-tehuti-request_firmware.patch -+ features/all/drivers-net-typhoon-request_firmware.patch -+ features/all/drivers-scsi-qla1280-request_firmware.patch -+ features/all/export-gfs2-locking-symbols.patch +# FIXME: +#+ features/all/drivers-gpu-drm-radeon-request_firmware.patch +#+ features/all/export-gfs2-locking-symbols.patch + features/all/export-unionfs-symbols.patch + bugfix/sparc/drivers_net-broken.patch @@ -25,17 +22,17 @@ + bugfix/powerpc/mm-mol.patch + bugfix/powerpc/lpar-console.patch #+ bugfix/all/wireless-regulatory-default-EU.patch -+ features/sparc/video-sunxvr500-intergraph.patch +#+ features/sparc/video-sunxvr500-intergraph.patch # Kirkwood support, will be in 2.6.30 -+ features/arm/orion-gpio-input-output.patch -+ features/arm/kw-mpp.patch -+ features/arm/mv-sdio.patch -+ features/arm/kw-register-sdio.patch -+ features/arm/kw-register-internal-devices.patch -+ features/arm/kw-sheevaplug.patch -+ features/arm/kw-sheevaplug-usb-power.patch -+ features/arm/kw-sheevaplug-led.patch -+ features/arm/kw-hook-up-i2c.patch -+ features/arm/kw-dont-init-rtc.patch -+ features/arm/kw-consistency-mpp.patch -+ features/arm/ts219.patch +#+ features/arm/orion-gpio-input-output.patch +#+ features/arm/kw-mpp.patch +#+ features/arm/mv-sdio.patch +#+ features/arm/kw-register-sdio.patch +#+ features/arm/kw-register-internal-devices.patch +#+ features/arm/kw-sheevaplug.patch +#+ features/arm/kw-sheevaplug-usb-power.patch +#+ features/arm/kw-sheevaplug-led.patch +#+ features/arm/kw-hook-up-i2c.patch +#+ features/arm/kw-dont-init-rtc.patch +#+ features/arm/kw-consistency-mpp.patch +#+ features/arm/ts219.patch diff --git a/debian/patches/series/orig-0 b/debian/patches/series/orig-0 index b8f393bf6..83ad4446e 100644 --- a/debian/patches/series/orig-0 +++ b/debian/patches/series/orig-0 @@ -1,16 +1,12 @@ + debian/dfsg/drivers-gpu-drm-mga-disable.patch + debian/dfsg/drivers-gpu-drm-r128-disable.patch + debian/dfsg/drivers-gpu-drm-radeon-disable.patch -+ debian/dfsg/drivers-net-bnx2-disable.patch + debian/dfsg/drivers-net-bnx2x-disable.patch + debian/dfsg/drivers-net-appletalk-cops.patch -+ debian/dfsg/drivers-net-hamradio-yam.patch -+ debian/dfsg/drivers-net-myri.patch -+ debian/dfsg/drivers-net-tehuti-disable.patch -+ debian/dfsg/drivers-net-tokenring-3c359-smctr.patch -+ debian/dfsg/drivers-net-typhoon-disable.patch -+ debian/dfsg/drivers-scsi-qla1280-disable.patch -+ debian/dfsg/drivers-scsi-qlogicpti.patch ++ debian/dfsg/drivers-staging-me4000-disable.patch ++ debian/dfsg/drivers-staging-otus-disable.patch ++ debian/dfsg/drivers-staging-rt2860-disable.patch ++ debian/dfsg/drivers-staging-rt2870-disable.patch + debian/dfsg/firmware-cleanup.patch + debian/dfsg/sound-pci.patch X debian/dfsg/files-1