lkml.org 
[lkml]   [2007]   [Jan]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    SubjectRe: [PATCH] Make CARDBUS_MEM_SIZE and CARDBUS_IO_SIZE customizable
    From
    On Mon, 22 Jan 2007 18:17:38 +0300, Sergei Shtylyov <sshtylyov@ru.mvista.com> wrote:
    > > + cbiosize=nn[KMG] The fixed amount of bus space which is
    > > + reserved for the CardBus bridges IO window.
    >
    > It shoyld be "bridge's"...

    Thanks. Updated again.


    Subject: [PATCH] Make CARDBUS_MEM_SIZE and CARDBUS_IO_SIZE customizable

    CARDBUS_MEM_SIZE was increased to 64MB on 2.6.20-rc2, but larger size
    might result in allocation failure for the reserving itself on some
    platforms (for example typical 32bit MIPS). Make it (and
    CARDBUS_IO_SIZE too) customizable by "pci=" option for such platforms.

    Signed-off-by: Atsushi Nemoto <anemo@mba.ocn.ne.jp>
    ---
    Documentation/kernel-parameters.txt | 6 ++++++
    drivers/pci/pci.c | 6 ++++++
    drivers/pci/setup-bus.c | 27 +++++++++++++++------------
    include/linux/pci.h | 3 +++
    4 files changed, 30 insertions(+), 12 deletions(-)

    diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
    index 25d2985..a194b8f 100644
    --- a/Documentation/kernel-parameters.txt
    +++ b/Documentation/kernel-parameters.txt
    @@ -1259,6 +1259,12 @@ and is between 256 and 4096 characters.
    This sorting is done to get a device
    order compatible with older (<= 2.4) kernels.
    nobfsort Don't sort PCI devices into breadth-first order.
    + cbiosize=nn[KMG] The fixed amount of bus space which is
    + reserved for the CardBus bridge's IO window.
    + The default value is 256 bytes.
    + cbmemsize=nn[KMG] The fixed amount of bus space which is
    + reserved for the CardBus bridge's memory
    + window. The default value is 64 megabytes.

    pcmv= [HW,PCMCIA] BadgePAD 4

    diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
    index 206c834..639069a 100644
    --- a/drivers/pci/pci.c
    +++ b/drivers/pci/pci.c
    @@ -1168,6 +1168,12 @@ static int __devinit pci_setup(char *str
    if (*str && (str = pcibios_setup(str)) && *str) {
    if (!strcmp(str, "nomsi")) {
    pci_no_msi();
    + } else if (!strncmp(str, "cbiosize=", 9)) {
    + pci_cardbus_io_size =
    + memparse(str + 9, &str);
    + } else if (!strncmp(str, "cbmemsize=", 10)) {
    + pci_cardbus_mem_size =
    + memparse(str + 10, &str);
    } else {
    printk(KERN_ERR "PCI: Unknown option `%s'\n",
    str);
    diff --git a/drivers/pci/setup-bus.c b/drivers/pci/setup-bus.c
    index 89f3036..1dfc288 100644
    --- a/drivers/pci/setup-bus.c
    +++ b/drivers/pci/setup-bus.c
    @@ -40,8 +40,11 @@ #define ROUND_UP(x, a) (((x) + (a) - 1)
    * FIXME: IO should be max 256 bytes. However, since we may
    * have a P2P bridge below a cardbus bridge, we need 4K.
    */
    -#define CARDBUS_IO_SIZE (256)
    -#define CARDBUS_MEM_SIZE (64*1024*1024)
    +#define DEFAULT_CARDBUS_IO_SIZE (256)
    +#define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024)
    +/* pci=cbmemsize=nnM,cbiosize=nn can override this */
    +unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
    +unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;

    static void __devinit
    pbus_assign_resources_sorted(struct pci_bus *bus)
    @@ -415,12 +418,12 @@ pci_bus_size_cardbus(struct pci_bus *bus
    * Reserve some resources for CardBus. We reserve
    * a fixed amount of bus space for CardBus bridges.
    */
    - b_res[0].start = CARDBUS_IO_SIZE;
    - b_res[0].end = b_res[0].start + CARDBUS_IO_SIZE - 1;
    + b_res[0].start = pci_cardbus_io_size;
    + b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
    b_res[0].flags |= IORESOURCE_IO;

    - b_res[1].start = CARDBUS_IO_SIZE;
    - b_res[1].end = b_res[1].start + CARDBUS_IO_SIZE - 1;
    + b_res[1].start = pci_cardbus_io_size;
    + b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
    b_res[1].flags |= IORESOURCE_IO;

    /*
    @@ -440,16 +443,16 @@ pci_bus_size_cardbus(struct pci_bus *bus
    * twice the size.
    */
    if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
    - b_res[2].start = CARDBUS_MEM_SIZE;
    - b_res[2].end = b_res[2].start + CARDBUS_MEM_SIZE - 1;
    + b_res[2].start = pci_cardbus_mem_size;
    + b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
    b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;

    - b_res[3].start = CARDBUS_MEM_SIZE;
    - b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE - 1;
    + b_res[3].start = pci_cardbus_mem_size;
    + b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
    b_res[3].flags |= IORESOURCE_MEM;
    } else {
    - b_res[3].start = CARDBUS_MEM_SIZE * 2;
    - b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE * 2 - 1;
    + b_res[3].start = pci_cardbus_mem_size * 2;
    + b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
    b_res[3].flags |= IORESOURCE_MEM;
    }
    }
    diff --git a/include/linux/pci.h b/include/linux/pci.h
    index f3c617e..ff04c69 100644
    --- a/include/linux/pci.h
    +++ b/include/linux/pci.h
    @@ -837,5 +837,8 @@ #define PCIPCI_VSFX 16
    #define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
    #define PCIAGP_FAIL 64 /* No PCI to AGP DMA */

    +extern unsigned long pci_cardbus_io_size;
    +extern unsigned long pci_cardbus_mem_size;
    +
    #endif /* __KERNEL__ */
    #endif /* LINUX_PCI_H */
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2007-01-23 03:11    [W:4.631 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site