Re: [PATCH v8 00/12] PCI: brcmstb: enable PCIe for STB chips
On 7/15/20 7:35 AM, Jim Quinlan wrote: > Patchset Summary: > Enhance a PCIe host controller driver. Because of its unusual design > we are foced to change dev->dma_pfn_offset into a more general role > allowing multiple offsets. See the 'v1' notes below for more info. Christoph, Robin, are you happy with this version? > > v8: > Commit: "device core: Introduce DMA range map, supplanting ..." > -- To satisfy a specific m68 compile configuration, I moved the 'struct > bus_dma_region; definition out of #ifdef CONFIG_HAS_DMA and also defined > three inline functions for !CONFIG_HAS_DMA (kernel test robot). > -- The sunXi drivers -- suc4i_csi, sun6i_csi, cedrus_hw -- set > a pfn_offset outside of_dma_configure() but the code offers no > insight on the size of the translation window. V7 had me using > SIZE_MAX as the size. I have since contacted the sunXi maintainer and > he said that using a size of SZ_4G would cover sunXi configurations. > > v7: > Commit: "device core: Introduce DMA range map, supplanting ..." > -- remove second kcalloc/copy in device.c (AndyS) > -- use PTR_ERR_OR_ZERO() and PHYS_PFN() (AndyS) > -- indentation, sizeof(struct ...) => sizeof(*r) (AndyS) > -- add pfn.h definitions: PFN_DMA_ADDR(), DMA_ADDR_PFN() (AndyS) > -- Fixed compile error in "sun6i_csi.c" (kernel test robot) > Commit "ata: ahci_brcm: Fix use of BCM7216 reset controller" > -- correct name of function in the commit msg (SergeiS) > > v6: > Commit "device core: Introduce DMA range map": > -- of_dma_get_range() now takes a single argument and returns either > NULL, a valid map, or an ERR_PTR. (Robin) > -- offsets are no longer a PFN value but an actual address. (Robin) > -- the bus_dma_region struct stores the range size instead of > the cpu_end and pci_end values. (Robin) > -- devices that were setting a single offset with no boundaries > have been modified to have boundaries; in a few places > where this informatino was unavilable a /* FIXME: ... */ > comment was added. (Robin) > -- dma_attach_offset_range() can be called when an offset > map already exists; if it's range is already present > nothing is done and success is returned. (Robin) > All commits: > -- Man name/style/corrections/etc changed (Bjorn) > -- rebase to Torvalds master > > v5: > Commit "device core: Introduce multiple dma pfn offsets" > -- in of/address.c: "map_size = 0" => "*map_size = 0" > -- use kcalloc instead of kzalloc (AndyS) > -- use PHYS_ADDR_MAX instead of "~(phys_addr_t)0" > Commit "PCI: brcmstb: Set internal memory viewport sizes" > -- now gives error on missing dma-ranges property. > Commit "dt-bindings: PCI: Add bindings for more Brcmstb chips" > -- removed "Allof:" from brcm,scb-sizes definition (RobH) > All Commits: > -- indentation style, use max chars 100 (AndyS) > -- rebased to torvalds master > > v4: > Commit "device core: Introduce multiple dma pfn offsets" > -- of_dma_get_range() does not take a dev param but instead > takes two "out" params: map and map_size. We do this so > that the code that parses dma-ranges is separate from > the code that modifies 'dev'. (Nicolas) > -- the separate case of having a single pfn offset has > been removed and is now processed by going through the > map array. (Nicolas) > -- move attach_uniform_dma_pfn_offset() from of/address.c to > dma/mapping.c so that it does not depend on CONFIG_OF. (Nicolas) > -- devm_kcalloc => devm_kzalloc (DanC) > -- add/fix assignment to dev->dma_pfn_offset_map for func > attach_uniform_dma_pfn_offset() (DanC, Nicolas) > -- s/struct dma_pfn_offset_region/struct bus_dma_region/ (Nicolas) > -- s/attach_uniform_dma_pfn_offset/dma_attach_uniform_pfn_offset/ > -- s/attach_dma_pfn_offset_map/dma_attach_pfn_offset_map/ > -- More use of PFN_{PHYS,DOWN,UP}. (AndyS) > Commit "of: Include a dev param in of_dma_get_range()" > -- this commit was sqaushed with "device core: Introduce ..." > > v3: > Commit "device core: Introduce multiple dma pfn offsets" > Commit "arm: dma-mapping: Invoke dma offset func if needed" > -- The above two commits have been squashed. More importantly, > the code has been modified so that the functionality for > multiple pfn offsets subsumes the use of dev->dma_pfn_offset. > In fact, dma_pfn_offset is removed and supplanted by > dma_pfn_offset_map, which is a pointer to an array. The > more common case of a uniform offset is now handled as > a map with a single entry, while cases requiring multiple > pfn offsets use a map with multiple entries. Code paths > that used to do this: > > dev->dma_pfn_offset = mydrivers_pfn_offset; > > have been changed to do this: > > attach_uniform_dma_pfn_offset(dev, pfn_offset); > > Commit "dt-bindings: PCI: Add bindings for more Brcmstb chips" >
[PATCH v8 00/12] PCI: brcmstb: enable PCIe for STB chips
Patchset Summary: Enhance a PCIe host controller driver. Because of its unusual design we are foced to change dev->dma_pfn_offset into a more general role allowing multiple offsets. See the 'v1' notes below for more info. v8: Commit: "device core: Introduce DMA range map, supplanting ..." -- To satisfy a specific m68 compile configuration, I moved the 'struct bus_dma_region; definition out of #ifdef CONFIG_HAS_DMA and also defined three inline functions for !CONFIG_HAS_DMA (kernel test robot). -- The sunXi drivers -- suc4i_csi, sun6i_csi, cedrus_hw -- set a pfn_offset outside of_dma_configure() but the code offers no insight on the size of the translation window. V7 had me using SIZE_MAX as the size. I have since contacted the sunXi maintainer and he said that using a size of SZ_4G would cover sunXi configurations. v7: Commit: "device core: Introduce DMA range map, supplanting ..." -- remove second kcalloc/copy in device.c (AndyS) -- use PTR_ERR_OR_ZERO() and PHYS_PFN() (AndyS) -- indentation, sizeof(struct ...) => sizeof(*r) (AndyS) -- add pfn.h definitions: PFN_DMA_ADDR(), DMA_ADDR_PFN() (AndyS) -- Fixed compile error in "sun6i_csi.c" (kernel test robot) Commit "ata: ahci_brcm: Fix use of BCM7216 reset controller" -- correct name of function in the commit msg (SergeiS) v6: Commit "device core: Introduce DMA range map": -- of_dma_get_range() now takes a single argument and returns either NULL, a valid map, or an ERR_PTR. (Robin) -- offsets are no longer a PFN value but an actual address. (Robin) -- the bus_dma_region struct stores the range size instead of the cpu_end and pci_end values. (Robin) -- devices that were setting a single offset with no boundaries have been modified to have boundaries; in a few places where this informatino was unavilable a /* FIXME: ... */ comment was added. (Robin) -- dma_attach_offset_range() can be called when an offset map already exists; if it's range is already present nothing is done and success is returned. (Robin) All commits: -- Man name/style/corrections/etc changed (Bjorn) -- rebase to Torvalds master v5: Commit "device core: Introduce multiple dma pfn offsets" -- in of/address.c: "map_size = 0" => "*map_size = 0" -- use kcalloc instead of kzalloc (AndyS) -- use PHYS_ADDR_MAX instead of "~(phys_addr_t)0" Commit "PCI: brcmstb: Set internal memory viewport sizes" -- now gives error on missing dma-ranges property. Commit "dt-bindings: PCI: Add bindings for more Brcmstb chips" -- removed "Allof:" from brcm,scb-sizes definition (RobH) All Commits: -- indentation style, use max chars 100 (AndyS) -- rebased to torvalds master v4: Commit "device core: Introduce multiple dma pfn offsets" -- of_dma_get_range() does not take a dev param but instead takes two "out" params: map and map_size. We do this so that the code that parses dma-ranges is separate from the code that modifies 'dev'. (Nicolas) -- the separate case of having a single pfn offset has been removed and is now processed by going through the map array. (Nicolas) -- move attach_uniform_dma_pfn_offset() from of/address.c to dma/mapping.c so that it does not depend on CONFIG_OF. (Nicolas) -- devm_kcalloc => devm_kzalloc (DanC) -- add/fix assignment to dev->dma_pfn_offset_map for func attach_uniform_dma_pfn_offset() (DanC, Nicolas) -- s/struct dma_pfn_offset_region/struct bus_dma_region/ (Nicolas) -- s/attach_uniform_dma_pfn_offset/dma_attach_uniform_pfn_offset/ -- s/attach_dma_pfn_offset_map/dma_attach_pfn_offset_map/ -- More use of PFN_{PHYS,DOWN,UP}. (AndyS) Commit "of: Include a dev param in of_dma_get_range()" -- this commit was sqaushed with "device core: Introduce ..." v3: Commit "device core: Introduce multiple dma pfn offsets" Commit "arm: dma-mapping: Invoke dma offset func if needed" -- The above two commits have been squashed. More importantly, the code has been modified so that the functionality for multiple pfn offsets subsumes the use of dev->dma_pfn_offset. In fact, dma_pfn_offset is removed and supplanted by dma_pfn_offset_map, which is a pointer to an array. The more common case of a uniform offset is now handled as a map with a single entry, while cases requiring multiple pfn offsets use a map with multiple entries. Code paths that used to do this: dev->dma_pfn_offset = mydrivers_pfn_offset; have been changed to do this: attach_uniform_dma_pfn_offset(dev, pfn_offset); Commit "dt-bindings: PCI: Add bindings for more Brcmstb chips" -- Add if/then clause for required props: resets, reset-names (RobH) -- Change compatible list from const to enum (RobH) -- Change list of u32-tuples to u64 (RobH) Commit "of: Include a dev param in of_dma_get_range()" -- modify of/unittests.c to add NULL param in