mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 17:08:10 +00:00
ARM development updates for 5.18:
- amba bus cleanups - conversion to use reserve_initrd_mem() - remove -nostdlib from vdso link -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEuNNh8scc2k/wOAE+9OeQG+StrGQFAmIsY3EACgkQ9OeQG+St rGSwTA//dj+sV2ejTFR9QzfqcCq+S3ua4D8i+6x7O5apDPiFosIA8QqqAmE073Nr /KW/nu7hoAUDFHC8yuoR8Hg00+XaOeL7Z4k5Q8NtKv3iBR4z7L+Wpwed91rWl6gk hMuXeWkDNndNfNDQe1/Ert2h7yuHINwg+QKZ1ZIkjDI+tAGksW/pNMTvXlVzGqAo zVW1iTW6TntvrXqlSW4a1MKFAayGNHOBcTCiY9aJV6amcogWDHoHWNuU2SBD9vHY QWrTFIaif376dcAo+E2u57B2WTw3WhVVJCnQqMOGbaoZJoojLyPRn/GivHLhyRnt LhneRjGB7N6KX5eqrVSb28n6Q5l5TTCPT8cx/1zMnujplxJAx7Y3SNjhdwOfBNT+ MIOlCVexns4z3XlYFMmA7XPgKrT3voxnNkZvRfrAQuLkf6UZrQ72OCPl13l3XaF/ msXHdviFKbbVhZQpeakB+ww1H08zNUnBWrvU9laMeQw12ElOc9I8bl6lDWsTePd3 OBvSHNf/tvNoO1ICzeaqdFob7oHXpMw5ZifI9OjHCB8evzWnHZqNVkxOEgy6KgAR 7AmDZSMfCS02S4F3MSxcAiJXk2WBGmXOHA1Z7zRFmGLol4qFMzlAISe9Xt/Ykh8c Cdf3G7XGpxSUOrXcDPNy/FORIez6rf2Da1xiqUxWhc5Dhu6EaFE= =x+Ji -----END PGP SIGNATURE----- Merge tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm Pull ARM updates from Russell King: - amba bus cleanups - conversion to use reserve_initrd_mem() - remove -nostdlib from vdso link * tag 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: ARM: 9181/1: vdso: remove -nostdlib compiler flag ARM: 9175/1: Convert to reserve_initrd_mem() ARM: 9174/1: amba: Move EXPORT_SYMBOL() closer to definition ARM: 9173/1: amba: kill amba_find_match() ARM: 9172/1: amba: Cleanup amba pclk operation
This commit is contained in:
commit
90ea15b7c9
5 changed files with 9 additions and 134 deletions
|
@ -164,47 +164,6 @@ phys_addr_t __init arm_memblock_steal(phys_addr_t size, phys_addr_t align)
|
|||
return phys;
|
||||
}
|
||||
|
||||
static void __init arm_initrd_init(void)
|
||||
{
|
||||
#ifdef CONFIG_BLK_DEV_INITRD
|
||||
phys_addr_t start;
|
||||
unsigned long size;
|
||||
|
||||
initrd_start = initrd_end = 0;
|
||||
|
||||
if (!phys_initrd_size)
|
||||
return;
|
||||
|
||||
/*
|
||||
* Round the memory region to page boundaries as per free_initrd_mem()
|
||||
* This allows us to detect whether the pages overlapping the initrd
|
||||
* are in use, but more importantly, reserves the entire set of pages
|
||||
* as we don't want these pages allocated for other purposes.
|
||||
*/
|
||||
start = round_down(phys_initrd_start, PAGE_SIZE);
|
||||
size = phys_initrd_size + (phys_initrd_start - start);
|
||||
size = round_up(size, PAGE_SIZE);
|
||||
|
||||
if (!memblock_is_region_memory(start, size)) {
|
||||
pr_err("INITRD: 0x%08llx+0x%08lx is not a memory region - disabling initrd\n",
|
||||
(u64)start, size);
|
||||
return;
|
||||
}
|
||||
|
||||
if (memblock_is_region_reserved(start, size)) {
|
||||
pr_err("INITRD: 0x%08llx+0x%08lx overlaps in-use memory region - disabling initrd\n",
|
||||
(u64)start, size);
|
||||
return;
|
||||
}
|
||||
|
||||
memblock_reserve(start, size);
|
||||
|
||||
/* Now convert initrd to virtual addresses */
|
||||
initrd_start = __phys_to_virt(phys_initrd_start);
|
||||
initrd_end = initrd_start + phys_initrd_size;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND
|
||||
void check_cpu_icache_size(int cpuid)
|
||||
{
|
||||
|
@ -226,7 +185,7 @@ void __init arm_memblock_init(const struct machine_desc *mdesc)
|
|||
/* Register the kernel text, kernel data and initrd with memblock. */
|
||||
memblock_reserve(__pa(KERNEL_START), KERNEL_END - KERNEL_START);
|
||||
|
||||
arm_initrd_init();
|
||||
reserve_initrd_mem();
|
||||
|
||||
arm_mm_memblock_reserve();
|
||||
|
||||
|
|
|
@ -18,7 +18,7 @@ ccflags-y += -DDISABLE_BRANCH_PROFILING -DBUILD_VDSO32
|
|||
|
||||
ldflags-$(CONFIG_CPU_ENDIAN_BE8) := --be8
|
||||
ldflags-y := -Bsymbolic --no-undefined -soname=linux-vdso.so.1 \
|
||||
-z max-page-size=4096 -nostdlib -shared $(ldflags-y) \
|
||||
-z max-page-size=4096 -shared $(ldflags-y) \
|
||||
--hash-style=sysv --build-id=sha1 \
|
||||
-T
|
||||
|
||||
|
|
|
@ -370,6 +370,7 @@ int amba_driver_register(struct amba_driver *drv)
|
|||
|
||||
return driver_register(&drv->drv);
|
||||
}
|
||||
EXPORT_SYMBOL(amba_driver_register);
|
||||
|
||||
/**
|
||||
* amba_driver_unregister - remove an AMBA device driver
|
||||
|
@ -383,7 +384,7 @@ void amba_driver_unregister(struct amba_driver *drv)
|
|||
{
|
||||
driver_unregister(&drv->drv);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(amba_driver_unregister);
|
||||
|
||||
static void amba_device_release(struct device *dev)
|
||||
{
|
||||
|
@ -642,6 +643,7 @@ int amba_device_register(struct amba_device *dev, struct resource *parent)
|
|||
|
||||
return amba_device_add(dev, parent);
|
||||
}
|
||||
EXPORT_SYMBOL(amba_device_register);
|
||||
|
||||
/**
|
||||
* amba_device_put - put an AMBA device
|
||||
|
@ -668,66 +670,7 @@ void amba_device_unregister(struct amba_device *dev)
|
|||
{
|
||||
device_unregister(&dev->dev);
|
||||
}
|
||||
|
||||
|
||||
struct find_data {
|
||||
struct amba_device *dev;
|
||||
struct device *parent;
|
||||
const char *busid;
|
||||
unsigned int id;
|
||||
unsigned int mask;
|
||||
};
|
||||
|
||||
static int amba_find_match(struct device *dev, void *data)
|
||||
{
|
||||
struct find_data *d = data;
|
||||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
int r;
|
||||
|
||||
r = (pcdev->periphid & d->mask) == d->id;
|
||||
if (d->parent)
|
||||
r &= d->parent == dev->parent;
|
||||
if (d->busid)
|
||||
r &= strcmp(dev_name(dev), d->busid) == 0;
|
||||
|
||||
if (r) {
|
||||
get_device(dev);
|
||||
d->dev = pcdev;
|
||||
}
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* amba_find_device - locate an AMBA device given a bus id
|
||||
* @busid: bus id for device (or NULL)
|
||||
* @parent: parent device (or NULL)
|
||||
* @id: peripheral ID (or 0)
|
||||
* @mask: peripheral ID mask (or 0)
|
||||
*
|
||||
* Return the AMBA device corresponding to the supplied parameters.
|
||||
* If no device matches, returns NULL.
|
||||
*
|
||||
* NOTE: When a valid device is found, its refcount is
|
||||
* incremented, and must be decremented before the returned
|
||||
* reference.
|
||||
*/
|
||||
struct amba_device *
|
||||
amba_find_device(const char *busid, struct device *parent, unsigned int id,
|
||||
unsigned int mask)
|
||||
{
|
||||
struct find_data data;
|
||||
|
||||
data.dev = NULL;
|
||||
data.parent = parent;
|
||||
data.busid = busid;
|
||||
data.id = id;
|
||||
data.mask = mask;
|
||||
|
||||
bus_for_each_dev(&amba_bustype, NULL, &data, amba_find_match);
|
||||
|
||||
return data.dev;
|
||||
}
|
||||
EXPORT_SYMBOL(amba_device_unregister);
|
||||
|
||||
/**
|
||||
* amba_request_regions - request all mem regions associated with device
|
||||
|
@ -749,6 +692,7 @@ int amba_request_regions(struct amba_device *dev, const char *name)
|
|||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(amba_request_regions);
|
||||
|
||||
/**
|
||||
* amba_release_regions - release mem regions associated with device
|
||||
|
@ -763,11 +707,4 @@ void amba_release_regions(struct amba_device *dev)
|
|||
size = resource_size(&dev->res);
|
||||
release_mem_region(dev->res.start, size);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL(amba_driver_register);
|
||||
EXPORT_SYMBOL(amba_driver_unregister);
|
||||
EXPORT_SYMBOL(amba_device_register);
|
||||
EXPORT_SYMBOL(amba_device_unregister);
|
||||
EXPORT_SYMBOL(amba_find_device);
|
||||
EXPORT_SYMBOL(amba_request_regions);
|
||||
EXPORT_SYMBOL(amba_release_regions);
|
||||
|
|
|
@ -2968,7 +2968,7 @@ static int __maybe_unused pl330_suspend(struct device *dev)
|
|||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
|
||||
pm_runtime_force_suspend(dev);
|
||||
amba_pclk_unprepare(pcdev);
|
||||
clk_unprepare(pcdev->pclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -2978,7 +2978,7 @@ static int __maybe_unused pl330_resume(struct device *dev)
|
|||
struct amba_device *pcdev = to_amba_device(dev);
|
||||
int ret;
|
||||
|
||||
ret = amba_pclk_prepare(pcdev);
|
||||
ret = clk_prepare(pcdev->pclk);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
|
|
@ -117,30 +117,9 @@ void amba_device_put(struct amba_device *);
|
|||
int amba_device_add(struct amba_device *, struct resource *);
|
||||
int amba_device_register(struct amba_device *, struct resource *);
|
||||
void amba_device_unregister(struct amba_device *);
|
||||
struct amba_device *amba_find_device(const char *, struct device *, unsigned int, unsigned int);
|
||||
int amba_request_regions(struct amba_device *, const char *);
|
||||
void amba_release_regions(struct amba_device *);
|
||||
|
||||
static inline int amba_pclk_enable(struct amba_device *dev)
|
||||
{
|
||||
return clk_enable(dev->pclk);
|
||||
}
|
||||
|
||||
static inline void amba_pclk_disable(struct amba_device *dev)
|
||||
{
|
||||
clk_disable(dev->pclk);
|
||||
}
|
||||
|
||||
static inline int amba_pclk_prepare(struct amba_device *dev)
|
||||
{
|
||||
return clk_prepare(dev->pclk);
|
||||
}
|
||||
|
||||
static inline void amba_pclk_unprepare(struct amba_device *dev)
|
||||
{
|
||||
clk_unprepare(dev->pclk);
|
||||
}
|
||||
|
||||
/* Some drivers don't use the struct amba_device */
|
||||
#define AMBA_CONFIG_BITS(a) (((a) >> 24) & 0xff)
|
||||
#define AMBA_REV_BITS(a) (((a) >> 20) & 0x0f)
|
||||
|
|
Loading…
Reference in a new issue